This is an automated email from the ASF dual-hosted git repository. jgrassel pushed a commit to branch 2.2.x in repository https://gitbox.apache.org/repos/asf/openjpa.git
The following commit(s) were added to refs/heads/2.2.x by this push: new fe80c98 OPENJPA_2817: Update PCTransformer to be thread-wise for reentrancy. new 172c084 Merge pull request #64 from jgrassel/OPENJPA_2817_22X fe80c98 is described below commit fe80c984b36a63625a921da6cee5c494bba3dce3 Author: Joe Grassel <jgras...@apache.org> AuthorDate: Tue Jun 30 09:27:25 2020 -0500 OPENJPA_2817: Update PCTransformer to be thread-wise for reentrancy. Signed-off-by: Joe Grassel <jgras...@apache.org> --- .../org/apache/openjpa/enhance/PCClassFileTransformer.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java index b04bc23..567db23 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java @@ -49,6 +49,7 @@ public class PCClassFileTransformer private static final Localizer _loc = Localizer.forPackage (PCClassFileTransformer.class); + private static final ThreadLocal<Boolean> _isTransformingInLocalThread = new ThreadLocal(); // OJ-2817 private final MetaDataRepository _repos; private final PCEnhancer.Flags _flags; @@ -120,12 +121,17 @@ public class PCClassFileTransformer // prevent re-entrant calls, which can occur if the enhancing // loader is used to also load OpenJPA libraries; this is to prevent // recursive enhancement attempts for internal openjpa libraries - if (_transforming) + Boolean transforming = _isTransformingInLocalThread.get(); + if (transforming != null) { return null; - - _transforming = true; + } + _isTransformingInLocalThread.set(Boolean.TRUE); - return transform0(className, redef, bytes); + try { + return transform0(className, redef, bytes); + } finally { + _isTransformingInLocalThread.remove(); + } } /**