tie the lifetime of the lua state to components #353
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.
Currently, the lifetime of the lua state is not destroyed even all sessions are dead. This is because the Lua state is tied to the registration, not the real live components.
This creates a rather weird problem, that the Lua state will not be destroyed when all sessions are destroyed with
rime_api->cleanup_all_sessions
. A known problem is that this can affect the usability of synchronization, if the lua script author forgets to set luaComponent
s to nil and/or callcollectgarbage
manually.This PR defers the creation of the lua state until a lua gear is actually created. Then, the ownership of the created lua state is shared globally, and the lua state will be destroyed when no one is referring to the lua state. Finally, if it is requested again, a new lua state will be created.
This is probably a breaking change for some users.