You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2017/09/08 07:39:48 UTC
svn commit: r1807676 -
/felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
Author: gnodet
Date: Fri Sep 8 07:39:48 2017
New Revision: 1807676
URL: http://svn.apache.org/viewvc?rev=1807676&view=rev
Log:
[FELIX-5539] Directory Watcher leaks ZipInflater
Modified:
felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
Modified: felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java?rev=1807676&r1=1807675&r2=1807676&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java (original)
+++ felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java Fri Sep 8 07:39:48 2017
@@ -947,14 +947,7 @@ public class DirectoryWatcher extends Th
URL transformed = artifact.getTransformedUrl();
String location = transformed.toString();
BufferedInputStream in = new BufferedInputStream(transformed.openStream());
- try
- {
- bundle = installOrUpdateBundle(location, in, artifact.getChecksum(), modified);
- }
- finally
- {
- in.close();
- }
+ bundle = installOrUpdateBundle(location, in, artifact.getChecksum(), modified);
artifact.setBundleId(bundle.getBundleId());
}
// if the listener is an artifact transformer
@@ -968,14 +961,7 @@ public class DirectoryWatcher extends Th
File transformed = artifact.getTransformed();
String location = path.toURI().normalize().toString();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(transformed != null ? transformed : path));
- try
- {
- bundle = installOrUpdateBundle(location, in, artifact.getChecksum(), modified);
- }
- finally
- {
- in.close();
- }
+ bundle = installOrUpdateBundle(location, in, artifact.getChecksum(), modified);
artifact.setBundleId(bundle.getBundleId());
}
installationFailures.remove(path);
@@ -997,53 +983,62 @@ public class DirectoryWatcher extends Th
String bundleLocation, BufferedInputStream is, long checksum, AtomicBoolean modified)
throws IOException, BundleException
{
- is.mark(256 * 1024);
- JarInputStream jar = new JarInputStream(is);
- Manifest m = jar.getManifest();
- if( m == null ) {
- throw new BundleException(
- "The bundle " + bundleLocation + " does not have a META-INF/MANIFEST.MF! "+
- "Make sure, META-INF and MANIFEST.MF are the first 2 entries in your JAR!");
- }
- String sn = m.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
- String vStr = m.getMainAttributes().getValue(Constants.BUNDLE_VERSION);
- Version v = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
- Bundle[] bundles = context.getBundles();
- for (Bundle b : bundles) {
- if (b.getSymbolicName() != null && b.getSymbolicName().equals(sn)) {
- vStr = b.getHeaders().get(Constants.BUNDLE_VERSION);
- Version bv = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
- if (v.equals(bv)) {
- is.reset();
- if (Util.loadChecksum(b, context) != checksum) {
- log(Logger.LOG_WARNING,
- "A bundle with the same symbolic name ("
- + sn + ") and version (" + vStr
- + ") is already installed. Updating this bundle instead.", null
- );
- stopTransient(b);
- Util.storeChecksum(b, checksum, context);
- b.update(is);
- modified.set(true);
+ JarInputStream jar = null;
+ try {
+ is.mark(256 * 1024);
+ jar = new JarInputStream(is);
+ Manifest m = jar.getManifest();
+ if( m == null ) {
+ throw new BundleException(
+ "The bundle " + bundleLocation + " does not have a META-INF/MANIFEST.MF! " +
+ "Make sure, META-INF and MANIFEST.MF are the first 2 entries in your JAR!");
+ }
+ String sn = m.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
+ String vStr = m.getMainAttributes().getValue(Constants.BUNDLE_VERSION);
+ Version v = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
+ Bundle[] bundles = context.getBundles();
+ for (Bundle b : bundles) {
+ if (b.getSymbolicName() != null && b.getSymbolicName().equals(sn)) {
+ vStr = b.getHeaders().get(Constants.BUNDLE_VERSION);
+ Version bv = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
+ if (v.equals(bv)) {
+ is.reset();
+ if (Util.loadChecksum(b, context) != checksum) {
+ log(Logger.LOG_WARNING,
+ "A bundle with the same symbolic name ("
+ + sn + ") and version (" + vStr
+ + ") is already installed. Updating this bundle instead.", null
+ );
+ stopTransient(b);
+ Util.storeChecksum(b, checksum, context);
+ b.update(is);
+ modified.set(true);
+ }
+ return b;
}
- return b;
}
}
- }
- is.reset();
- Util.log(context, Logger.LOG_INFO, "Installing bundle " + sn
- + " / " + v, null);
- Bundle b = context.installBundle(bundleLocation, is);
- Util.storeChecksum(b, checksum, context);
- modified.set(true);
+ is.reset();
+ Util.log(context, Logger.LOG_INFO, "Installing bundle " + sn
+ + " / " + v, null);
+ Bundle b = context.installBundle(bundleLocation, is);
+ Util.storeChecksum(b, checksum, context);
+ modified.set(true);
+
+ // Set default start level at install time, the user can override it if he wants
+ if (startLevel != 0) {
+ b.adapt(BundleStartLevel.class).setStartLevel(startLevel);
+ }
- // Set default start level at install time, the user can override it if he wants
- if (startLevel != 0)
+ return b;
+ }
+ finally
{
- b.adapt(BundleStartLevel.class).setStartLevel(startLevel);
+ if (jar != null)
+ {
+ jar.close();
+ }
}
-
- return b;
}
/**