Skip to content

Commit c82e026

Browse files
author
Joe Grassel
committed
OPENJPA_2817: Update PCTransformer to be thread-wise for reentrancy.
Signed-off-by: Joe Grassel <jgrassel@apache.org>
1 parent a68a0f1 commit c82e026

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCClassFileTransformer.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public class PCClassFileTransformer
4949

5050
private static final Localizer _loc = Localizer.forPackage
5151
(PCClassFileTransformer.class);
52+
private static final ThreadLocal<Boolean> tl = new ThreadLocal();
5253

5354
private final MetaDataRepository _repos;
5455
private final PCEnhancer.Flags _flags;
@@ -120,12 +121,17 @@ public byte[] transform(ClassLoader loader, String className,
120121
// prevent re-entrant calls, which can occur if the enhancing
121122
// loader is used to also load OpenJPA libraries; this is to prevent
122123
// recursive enhancement attempts for internal openjpa libraries
123-
if (_transforming)
124+
Boolean transforming = tl.get();
125+
if (transforming != null) {
124126
return null;
125-
126-
_transforming = true;
127+
}
128+
tl.set(Boolean.TRUE);
127129

128-
return transform0(className, redef, bytes);
130+
try {
131+
return transform0(className, redef, bytes);
132+
} finally {
133+
tl.remove();
134+
}
129135
}
130136

131137
/**

0 commit comments

Comments
 (0)