77import java .util .List ;
88import java .util .Map ;
99import java .util .Set ;
10+ import org .crac .Context ;
11+ import org .crac .Resource ;
1012
1113/**
1214 * Classloader used with the fast-jar package type.
@@ -41,6 +43,8 @@ public final class RunnerClassLoader extends ClassLoader {
4143 //Protected by synchronization on the above field, as they are related.
4244 private boolean postBootPhase = false ;
4345
46+ private final CracResource resource ;
47+
4448 RunnerClassLoader (ClassLoader parent , Map <String , ClassLoadingResource []> resourceDirectoryMap ,
4549 Set <String > parentFirstPackages , Set <String > nonExistentResources ,
4650 List <String > fullyIndexedDirectories , Map <String , ClassLoadingResource []> directlyIndexedResourcesIndexMap ) {
@@ -50,6 +54,9 @@ public final class RunnerClassLoader extends ClassLoader {
5054 this .nonExistentResources = nonExistentResources ;
5155 this .fullyIndexedDirectories = fullyIndexedDirectories ;
5256 this .directlyIndexedResourcesIndexMap = directlyIndexedResourcesIndexMap ;
57+
58+ resource = new CracResource ();
59+ org .crac .Core .getGlobalContext ().register (resource );
5360 }
5461
5562 @ Override
@@ -290,4 +297,22 @@ public void resetInternalCaches() {
290297 this .postBootPhase = true ;
291298 }
292299 }
300+
301+ class CracResource implements Resource {
302+ @ Override
303+ public void beforeCheckpoint (Context <? extends Resource > ctx ) {
304+ synchronized (currentlyBufferedResources ) {
305+ for (int i = 0 ; i < currentlyBufferedResources .length ; ++i ) {
306+ if (currentlyBufferedResources [i ] != null ) {
307+ currentlyBufferedResources [i ].resetInternalCaches ();
308+ currentlyBufferedResources [i ] = null ;
309+ }
310+ }
311+ }
312+ }
313+
314+ @ Override
315+ public void afterRestore (Context <? extends Resource > ctx ) {
316+ }
317+ }
293318}
0 commit comments