[hibernate-dev] Static analysis report on thread safety of Hibernate
Scott Marlow
smarlow at redhat.com
Thu Aug 1 13:27:52 EDT 2013
On 08/01/2013 10:41 AM, Scott Marlow wrote:
>>> - The shared non-thread-safe content finding looks like it spots a
>>> symptom of a real bug: in the method 'getNamedEntityManagerFactory', a
>>> hashmap is extracted from a concurrent hash map and read from.
>>> Concurrently, there is the possibility that items are removed from the
>>> hash maps. There is no common lock guarding these accesses. This may
>>> cause, at worst, infinite loops, if the hashmap is accessed in an
>>> inconsistent state.
>> I actually have no idea why it keeps a Set for each name. Seems to me
>> the code ultimately throws an exception anyway if more than one was
>> registered under that name, so why not just store
>> name->EntityManagerFactory? Scott?
>
> We could of thrown an exception if more than one was registered under
> that name but Emmanuel had a good concern about how that would break
> Hibernate applications that are clustered in some platforms (as well as
> applications that serialize/deserialize the EntityManagerFactory).
>
> Instead of throwing an exception when multiple EMFs are added under the
> same name, we log a warning and track the multiple EMFs registered under
> a particular name.
>
> However, we do throw an exception only when the attempt to deserialize
> the EMF by name but there are more than one EMFs registered (see
> EntityManagerFactoryRegistry.getNamedEntityManagerFactory(String name)).
>
> The distinction is that applications might create multiple EMFs with the
> same name and we allow that but will throw an error, for the smaller set
> of apps that actually try to deserialize the EMF by name.
>
> It does look like
> EntityManagerFactoryRegistry.getNamedEntityManagerFactory(String name),
> is reading an unprotected Set that could be updated concurrently from a
> different thread.
>
> Any other feedback about this thread safety bug before I create a HHH jira?
HHH-8406 is for fixing the thread safety issue.
>
> Scott
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
More information about the hibernate-dev
mailing list