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 <[email protected]>
AuthorDate: Tue Jun 30 09:27:25 2020 -0500
OPENJPA_2817: Update PCTransformer to be thread-wise for reentrancy.
Signed-off-by: Joe Grassel <[email protected]>
---
.../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();
+ }
}
/**