You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/07/01 12:56:11 UTC

[jira] [Commented] (FLINK-4096) Nested FileOutputStream is not closed in JarFileCreator

    [ https://issues.apache.org/jira/browse/FLINK-4096?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15358915#comment-15358915 ] 

ASF GitHub Bot commented on FLINK-4096:
---------------------------------------

Github user zentol commented on a diff in the pull request:

    https://github.com/apache/flink/pull/2172#discussion_r69295166
  
    --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/util/JarFileCreator.java ---
    @@ -189,33 +189,33 @@ public synchronized void createJarFile() throws IOException {
     			this.outputFile.delete();
     		}
     
    -		final JarOutputStream jos = new JarOutputStream(new FileOutputStream(this.outputFile), new Manifest());
    -		final Iterator<Class<?>> it = this.classSet.iterator();
    -		while (it.hasNext()) {
    +		try ( JarOutputStream jos = new JarOutputStream(new FileOutputStream(this.outputFile), new Manifest())) {
    +			final Iterator<Class<?>> it = this.classSet.iterator();
    +			while (it.hasNext()) {
     
    -			final Class<?> clazz = it.next();
    -			final String entry = clazz.getName().replace('.', '/') + CLASS_EXTENSION;
    +				final Class<?> clazz = it.next();
    +				final String entry = clazz.getName().replace('.', '/') + CLASS_EXTENSION;
     
    -			jos.putNextEntry(new JarEntry(entry));
    +				jos.putNextEntry(new JarEntry(entry));
     
    -			String name = clazz.getName();
    -			int n = name.lastIndexOf('.');
    -			String className = null;
    -			if (n > -1) {
    -				className = name.substring(n + 1, name.length());
    -			}
    -			//Using the part after last dot instead of class.getSimpleName() could resolve the problem of inner class.
    -			final InputStream classInputStream = clazz.getResourceAsStream(className + CLASS_EXTENSION);
    +				String name = clazz.getName();
    +				int n = name.lastIndexOf('.');
    +				String className = null;
    +				if (n > -1) {
    +					className = name.substring(n + 1, name.length());
    +				}
    +				//Using the part after last dot instead of class.getSimpleName() could resolve the problem of inner class.
    +				final InputStream classInputStream = clazz.getResourceAsStream(className + CLASS_EXTENSION);
     
    -			int num = classInputStream.read(buf);
    -			while (num != -1) {
    -				jos.write(buf, 0, num);
    -				num = classInputStream.read(buf);
    -			}
    +				int num = classInputStream.read(buf);
    +				while (num != -1) {
    +					jos.write(buf, 0, num);
    +					num = classInputStream.read(buf);
    +				}
     
    -			classInputStream.close();
    -			jos.closeEntry();
    +				classInputStream.close();
    +				jos.closeEntry();
    +			}
     		}
    -		jos.close();
    --- End diff --
    
    close() is now never called.


> Nested FileOutputStream is not closed in JarFileCreator
> -------------------------------------------------------
>
>                 Key: FLINK-4096
>                 URL: https://issues.apache.org/jira/browse/FLINK-4096
>             Project: Flink
>          Issue Type: Bug
>            Reporter: Ted Yu
>            Assignee: Ivan Mushketyk
>            Priority: Minor
>
> {code}
>     final JarOutputStream jos = new JarOutputStream(new FileOutputStream(this.outputFile), new Manifest());
> {code}
> When jos is closed, the FileOutputStream is not automatically closed.
> FileOutputStream should be closed explicitly.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)