Fix crashes on multi thread calls to read/write/destroy #168
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.
Multi thread access to
assertInit
was causing race conditions on creating Paper dir which caused exception likeRuntimeException("Couldn't create Paper dir:..)
. That was easy fixed with addingsynchronized
to the function.The other problem raised after that: what happened if
destroy
is called whileread/write
still in progress? That caused many issues on reading/writing to file. Sincedestroy
makes changes for all keys, andread/write
synchronized by particular key, I've introduced a new global Semaphore to lock all per-key operations while global operation is in progress. Also global operations (likedestroy
andgetAllKeys
) won't be started before currently running per-key operations (read
,write
etc) are completed.Fix #66
Fix #108
Fix #114
Fix #159
Fix #160