-
-
Notifications
You must be signed in to change notification settings - Fork 982
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Make ConverterManager.getInstance()
init thread-safe.
#776
Conversation
We encountered a TSAN error because 2 threads were racing to call `ConverterManager.getInstance()`. My read is that the current code could actually be unsafe, since one thread might see `INSTANCE` as non-null before the other thread has initialized its fields. Fortunately, this looks like a good case for [the initialization-on-demand holder idiom](https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#:~:text=initialization%20on%20demand%20holder%20idiom). (There would be additional thread-safety concerns if anyone were to try to _mutate_ the `ConverterManager` instance concurrently with usage. But I'm not sure there's a solution to that short of spraying `synchronized` around. That seems like probably overkill, given the possible performance impact for what I'd hope is an uncommon use case.)
Looks like a good change and happy to merge, but unfortunately |
Sorry, I did not anticipate reflection in the tests :) I'll take care of it and then actually run tests, which apparently I had neglected to do. |
The tests now pass. I updated the assertion to look for the field in the new class. I now check that that class is But I'm happy to update it in some other way if you think that would be best. |
Thanks! |
This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [joda-time:joda-time](https://www.joda.org/joda-time/) ([source](https://github.com/JodaOrg/joda-time)) | `2.12.7` -> `2.13.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/joda-time:joda-time/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/joda-time:joda-time/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/joda-time:joda-time/2.12.7/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/joda-time:joda-time/2.12.7/2.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>JodaOrg/joda-time (joda-time:joda-time)</summary> ### [`v2.13.0`](https://github.com/JodaOrg/joda-time/releases/tag/v2.13.0) [Compare Source](https://github.com/JodaOrg/joda-time/compare/v2.12.7...v2.13.0) See the [change notes](https://www.joda.org/joda-time/changes-report.html#a2.13.0) for more information. #### What's Changed - Make `ConverterManager.getInstance()` init thread-safe. by [@​cpovirk](https://github.com/cpovirk) in [https://github.com/JodaOrg/joda-time/pull/776](https://github.com/JodaOrg/joda-time/pull/776) - Add website page about secutity/CVEs by [@​jodastephen](https://github.com/jodastephen) in [https://github.com/JodaOrg/joda-time/pull/781](https://github.com/JodaOrg/joda-time/pull/781) - fix: include native-image files correctly by [@​klopfdreh](https://github.com/klopfdreh) in [https://github.com/JodaOrg/joda-time/pull/784](https://github.com/JodaOrg/joda-time/pull/784) - Enhance TZDB compiler to better match spec by [@​jodastephen](https://github.com/jodastephen) in [https://github.com/JodaOrg/joda-time/pull/786](https://github.com/JodaOrg/joda-time/pull/786) - Update GitHub actions to latest versions by [@​jodastephen](https://github.com/jodastephen) in [https://github.com/JodaOrg/joda-time/pull/788](https://github.com/JodaOrg/joda-time/pull/788) - Fix TZDB compiler %z parsing by [@​jodastephen](https://github.com/jodastephen) in [https://github.com/JodaOrg/joda-time/pull/787](https://github.com/JodaOrg/joda-time/pull/787) - Update tzdb handling by [@​jodastephen](https://github.com/jodastephen) in [https://github.com/JodaOrg/joda-time/pull/789](https://github.com/JodaOrg/joda-time/pull/789) - Update time zone data to 2024bgtz by [@​github-actions](https://github.com/github-actions) in [https://github.com/JodaOrg/joda-time/pull/790](https://github.com/JodaOrg/joda-time/pull/790) #### New Contributors - [@​cpovirk](https://github.com/cpovirk) made their first contribution in [https://github.com/JodaOrg/joda-time/pull/776](https://github.com/JodaOrg/joda-time/pull/776) - [@​klopfdreh](https://github.com/klopfdreh) made their first contribution in [https://github.com/JodaOrg/joda-time/pull/784](https://github.com/JodaOrg/joda-time/pull/784) **Full Changelog**: JodaOrg/joda-time@v2.12.7...v2.13.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/camunda/camunda). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC43NC4xIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYXV0b21lcmdlIl19-->
We encountered a TSAN error because 2 threads were racing to call
ConverterManager.getInstance()
. My read is that the current code couldactually be unsafe, since one thread might see
INSTANCE
as non-nullbefore the other thread has initialized its fields.
Fortunately, this looks like a good case for the
initialization-on-demand holder
idiom.
(There would be additional thread-safety concerns if anyone were to try
to mutate the
ConverterManager
instance concurrently with usage. ButI'm not sure there's a solution to that short of spraying
synchronized
around. That seems like probably overkill, given the possible
performance impact for what I'd hope is an uncommon use case.)