Yes, you are correct, the current approach is not aggressive enough since it relies on GC, which is probably not the best idea. I will add your patch below to the shutdown method and commit shortly.

-> richard

Felix Meschberger wrote:
Hi again,

During my tests of replacing plain file system access with a
factory-based resource wrapper, I noticed, that on shutdown of the
framework, the modules are not properly closed. Thus the jar files
remain open until either garbage collected or the vm exits.

Shouldn't the Felix.shutdown() method close those modules doing something like:

       bundles = getBundles();
       for (int i = 0; i < bundles.length; i++) {
           BundleImpl bundle = (BundleImpl) bundles[i];
           try {
               IModule[] modules = bundle.getInfo().getModules();
               for (int j = 0; j < modules.length; j++) {
                   m_factory.removeModule(modules[j]);
               }
           }
           catch (Exception ex) {
               m_logger.log(Logger.LOG_ERROR,
"Unable to remove " + bundle.getInfo().getLocation(), ex);
           }
       }

For my special use case - I create temporary files for the jar files
when running with a non-file system repository - this would enable the
JarFileX.close() method to remove the temporary files.

Regards
Felix

Reply via email to