Added saftey for ensuring callback is called

Summary:
Adds a return value to `MessageQueueThread#runOnQueue`, it's implementors and one caller.

It is currently possible for a callback to not be called (because the HandlerThread has been shutdown). If the callback is mission-critical (frees resources, releases a lock, etc) the callee has no indication that it needs to do something.

This surfaces that information to the callee.

Changelog:
[Android][Changed] - Made `MessageQueueThread#runOnQueue` return a boolean. Made `MessageQueueThreadImpl#runOnQueue` return false when the runnable is not submitted.

Reviewed By: RSNara

Differential Revision: D33075516

fbshipit-source-id: bd214a39ae066c0e7d413f2eaaaa05bd072ead2a
This commit is contained in:
Marshall Mann-Wood
2021-12-15 13:33:56 -08:00
committed by Facebook GitHub Bot
parent 19174a5ec5
commit 89faf0c9a8
4 changed files with 7 additions and 5 deletions
@@ -396,8 +396,8 @@ public class ReactContext extends ContextWrapper {
return Assertions.assertNotNull(mJSMessageQueueThread).isOnThread();
}
public void runOnJSQueueThread(Runnable runnable) {
Assertions.assertNotNull(mJSMessageQueueThread).runOnQueue(runnable);
public boolean runOnJSQueueThread(Runnable runnable) {
return Assertions.assertNotNull(mJSMessageQueueThread).runOnQueue(runnable);
}
/**
@@ -19,7 +19,7 @@ public interface MessageQueueThread {
* if it is being submitted from the same queue Thread.
*/
@DoNotStrip
void runOnQueue(Runnable runnable);
boolean runOnQueue(Runnable runnable);
/**
* Runs the given Callable on this Thread. It will be submitted to the end of the event queue even
@@ -55,15 +55,17 @@ public class MessageQueueThreadImpl implements MessageQueueThread {
*/
@DoNotStrip
@Override
public void runOnQueue(Runnable runnable) {
public boolean runOnQueue(Runnable runnable) {
if (mIsFinished) {
FLog.w(
ReactConstants.TAG,
"Tried to enqueue runnable on already finished thread: '"
+ getName()
+ "... dropping Runnable.");
return false;
}
mHandler.post(runnable);
return true;
}
@DoNotStrip