ruby: Prevent concurrent usage of Trilogy connections #226
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.
Using a trology connection in a concurrent way will likely lead to various protocol errors, but can also lead to various crashes.
As such it is preferable if Trilogy raises a clear to understand and deterministic error.
I chose to implement this on the Ruby side, because it's simpler and more straightforward.
I initially tried to do it in C, but the
_cb_waitcallback may raise or throw, so we'd need to userb_protect, and release the lock there. The problem is the callback doesn't have access to thetrilogy_contextstruct, so can't release the lock.If we're adament this should be done in C, we'll need a much larger refactor.
cc @tenderlove @jhawthorn