Support Article
Deadlock seen sporatically with injectKnownClass
SA-17525
Summary
Deadlocks have been seen between the RuleUsageSnapshot agent and other agents running at the same time. Deadlocks have also occurred at times when agents are not involved. One side of the deadlock is always with the injectKnownClass method.
Error Messages
at com.pega.pegarules.exec.internal.util.classloader.PRClassLoaderDB.injectKnownClass(PRClassLoaderDB.java)
- locked co[email protected]8092dc3d
at com.pega.pegarules.exec.internal.util.PRClassLoaderUtilsImpl.injectKnownClass(PRClassLoaderUtilsImpl.java)
at com.pega.pegarules.generation.internal.compiler.ClassloaderInjectingCompilationSaver.injectClasses(ClassloaderInjectingCompilationSaver.java)
at com.pega.pegarules.generation.internal.compiler.QueuedCompilationSaver.saveClasses(QueuedCompilationSaver.java:70)
Steps to Reproduce
Run system
Root Cause
A defect in Pegasystems’ code or rules with the injectKnownClass are of the code can result in a deadlock.
Resolution
Perform the following local-change:
Add this prconfig setting and then restart the server.
<env name="compiler/classloadCompilerOutput" value="false"/>
By setting this config setting injectKnownClass call that is one arm of the deadlock will be avoided. Essentially if it isn’t called it can’t participate in a deadlock. A side effect of this setting is that there may be NullPointer exceptions in the logs. The NullPointerExceptions that occur as a result of this setting can be ignored as they are non-fatal. The issues with the deadlock and nullpointer are fixed in Pega 7.1.8.
Published January 31, 2016 - Updated October 8, 2020
Have a question? Get answers now.
Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.