diff -r ac964af3b5e7 -r b0d5f00e69f7 src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Tue Sep 20 12:08:48 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Sep 21 21:56:53 2011 -0700 @@ -225,6 +225,11 @@ ? fileManager.getClassLoader(ANNOTATION_PROCESSOR_PATH) : fileManager.getClassLoader(CLASS_PATH); + if (processorClassLoader != null && processorClassLoader instanceof Closeable) { + JavaCompiler compiler = JavaCompiler.instance(context); + compiler.closeables = compiler.closeables.prepend((Closeable) processorClassLoader); + } + /* * If the "-processor" option is used, search the appropriate * path for the named class. Otherwise, use a service @@ -1211,14 +1216,6 @@ if (discoveredProcs != null) // Make calling close idempotent discoveredProcs.close(); discoveredProcs = null; - if (processorClassLoader != null && processorClassLoader instanceof Closeable) { - try { - ((Closeable) processorClassLoader).close(); - } catch (IOException e) { - JCDiagnostic msg = diags.fragment("fatal.err.cant.close.loader"); - throw new FatalError(msg, e); - } - } } private List getTopLevelClasses(List units) {