DRAFT add queue and thread for processing mRunnables asynchronously #618
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I discovered some issues caused by long running service.js code. The problem seems to be the MDSManager is single-threaded. When one Minidapp's service.js is doing something for a long time, blocking the thread, messages aren't delivered to other minidapps and the MDS Hub stops functioning corretly as well. Here's what I observed happens when service.js is running for a long time:
I can't see a simple fix for this. Ideally, I imagine each mRunnable should have its own queue of commands to process and a (small) pool of worker threads should be picking the mRunnables with non-empty queues and processing them asynchronously, while the MDSManager would only add new tasks to the queues.
A much simpler approach that fixes the worst issues of the hub itself not working correctly would be to have at least a single queue of pending tasks for all the mRunnables and one background thread to process them.
This PR is just a draft, a WIP, to show what the approach could be, to begin with. It's far from ideal but I tested it (on desktop) to fix the hub missbehaving at least, as a start.