Synchronized methods crash with 'using JNIEnv from the wrong thread' which is pretty weird because jni is supposed to be reloaded prior to each use. The crash probably happens on lock comparison. Sometimes, instead of crash the comparison result is just non-deterministic.
This is a serious bug, but we can live without synch. methods being checked by eraser in the worst scenario.
The bug is not caused by method synch, but rather by threads having not a common lock.
Somehow thread operator== is invoked when the universal set is already empty. Should it be invoked?
Synchronized methods crash with 'using JNIEnv from the wrong thread' which is pretty weird because jni is supposed to be reloaded prior to each use. The crash probably happens on lock comparison. Sometimes, instead of crash the comparison result is just non-deterministic. This is a serious bug, but we can live without synch. methods being checked by eraser in the worst scenario.