Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
ServerConnectionFactory uses double-checked locking for loading the services it depends on. This idiom is fundamentally broken.
Even marking the field that's locked this way volatile may not resolve the issue, as the object itself could be read as uninitialized even if the field (reference) isn't. I don't really know the JMM well enough to be sure that it's broken, but that's a good sign that we shouldn't do it unless we really need to for performance reasons (and even then...)
This may be best to resolve after GEODE-3751 and GEODE-3739 due to the changes to loading those refactors will bring.
While we're at it, we should assert that there is only one client protocol service, because we can't handle two and which one we choose is undefined.