afs commented on issue #2787:
URL: https://github.com/apache/jena/issues/2787#issuecomment-2433466881

   > This circular dependency between JenaSystem initialization and the 
ModelFactory is causing the issue.
   
   yes - specifically, it is the class initialization lock being held by 
ModelFactory and any locking in JenaSystem.
   
   With two threads, the deadlock is:
   
   Thread1 is the thread calling ModelFactory.createDefaultModel
   Thread2 is the thread calling JenaSystem.init directly.
   
   Thread1: lock order is take the ModelFactory class init lock, then take the 
JenaSystem sync lock.
   Thread2: lock order is take the JenaSystem sync then ModelFactory class init 
lock.
   
   Prior to the 8654c07 change, thread2 would not take the ModelFactory class 
init lock inside synchonized but continued executing on partial initialization 
which works mostly .. except when it doesn't and it causes an NPE #2675.
   
   It's a problem when using Jena as a library because of the multiple entry 
points doing class initlaization.
   
   FWIW JenaSystem.init came in part because of class initialization 
circularity seeing infrequent uninitialized data even on one thread due to 
different class initialization orders.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to