Skip to content

Commit 35c75c4

Browse files
committed
HHH-19230 (6.6) Ensure that thread local for org.hibernate.bytecode.enhance.internal.bytebuddy.SafeCacheProvider + OverridingClassFileLocator are completely cleared
Signed-off-by: Scott Marlow <[email protected]>
1 parent fbe192a commit 35c75c4

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/internal/bytebuddy/EnhancerClassLocator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ public interface EnhancerClassLocator extends TypePool {
3333
* @return the underlying {@link ClassFileLocator}
3434
*/
3535
ClassFileLocator asClassFileLocator();
36+
37+
void reset();
3638
}

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/internal/bytebuddy/EnhancerImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,11 @@ public void discoverTypes(String className, byte[] originalBytes) {
164164
}
165165
}
166166

167+
@Override
168+
public void clear() {
169+
typePool.reset();
170+
}
171+
167172
private DynamicType.Builder<?> doEnhance(Supplier<DynamicType.Builder<?>> builderSupplier, TypeDescription managedCtClass) {
168173
// skip if the class was already enhanced. This is very common in WildFly as classloading is highly concurrent.
169174
// We need to ensure that no class is instrumented multiple times as that might result in incorrect bytecode.

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/internal/bytebuddy/ModelTypePool.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,10 @@ public ClassFileLocator asClassFileLocator() {
114114
return locator;
115115
}
116116

117+
@Override
118+
public void reset() {
119+
locator.close();
120+
poolCache.clear();
121+
}
122+
117123
}

hibernate-core/src/main/java/org/hibernate/bytecode/enhance/spi/Enhancer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ public interface Enhancer {
4343
* @since 6.3
4444
*/
4545
void discoverTypes(String className, byte[] originalBytes) throws EnhancementException;
46+
47+
void clear();
4648
}

hibernate-core/src/main/java/org/hibernate/jpa/internal/enhance/EnhancingClassTransformerImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,16 @@ public byte[] transform(
5555
//see https://hibernate.atlassian.net/browse/HHH-18108
5656
return null;
5757
}
58-
58+
final Enhancer enhancer = getEnhancer( loader );
5959
try {
60-
return getEnhancer( loader ).enhance( className, classfileBuffer );
60+
return enhancer.enhance( className, classfileBuffer );
6161
}
6262
catch (final Exception e) {
6363
throw new TransformerException( "Error performing enhancement of " + className, e );
6464
}
6565
finally {
6666
bytecodeProvider.resetCaches();
67+
enhancer.clear();
6768
}
6869
}
6970

0 commit comments

Comments
 (0)