[ 
https://issues.apache.org/jira/browse/JAMES-1382?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tellier Benoit closed JAMES-1382.
---------------------------------
    Resolution: Duplicate

Duplicate of JAMES-1381

> An incomplete fix for the resource leak bugs in NNTPHandler.java
> ----------------------------------------------------------------
>
>                 Key: JAMES-1382
>                 URL: https://issues.apache.org/jira/browse/JAMES-1382
>             Project: James Server
>          Issue Type: Bug
>          Components: NNTPServer & Repository (removed)
>    Affects Versions: 2.3.0, 2.3.1, 2.3.2
>            Reporter: Guangtai Liang
>            Priority: Critical
>              Labels: incomplete_fix, missing_fixes
>   Original Estimate: 10m
>  Remaining Estimate: 10m
>
> The fix revision 108172 was aimed to remove resource leak bugs on the 
> BufferedReader object "in" (created in line 192), the Socket object 
> "this.socket", the OutputStream object "outs", and the InternetPrintWriter 
> object "out" in the method "handleConnection"of the file 
> "/james/server/trunk/src/java/org/apache/james/pop3server/POP3Handler.java 
> (now moved to 
> /james/server/branches/v2.3/src/java/org/apache/james/pop3server/POP3Handler.java)"
>  , but it is incomplete.
> There are some problems: 
> 1. when "in" isn't created successfully but the temp InputStreamReader object 
> is created successfully (at line 193), the temp InputStreamReader object will 
> be leaked. 
> 2. when the statements at lines 189-197 throw some exception, "this.socket" 
> and "in" will be leaked. 
> The best way to close such resource objects is putting such close operations 
> for all resource objects in the finaly block of a try-catch-finally structure 
> and then putting all other code in a try block.
> The problem still exists in the head revision (the temp BufferedInputStream 
> object created at line 233 and the "in" created at line 233 can be leaked). 
> The buggy code is copied as bellows:
> /**
>      * @see 
> org.apache.avalon.cornerstone.services.connection.ConnectionHandler#handleConnection
> (Socket)
>      */
>     public void handleConnection( Socket connection )
>             throws IOException {
>         String remoteHost = "";
>         String remoteIP = "";
>         try {
>             this.socket = connection;
>             synchronized (this) {
>                 handlerThread = Thread.currentThread();
>             }
>  232           // in = new BufferedReader(new 
> InputStreamReader(socket.getInputStream(), "ASCII"), 
> 512);
>  233           in = new CRLFTerminatedReader(new 
> BufferedInputStream(socket.getInputStream(), 512), 
> "ASCII");
>  234           remoteIP = socket.getInetAddress().getHostAddress ();
>  235           remoteHost = socket.getInetAddress().getHostName ();
>         } catch (Exception e) {
>             ......
>         }
> 250        if (getLogger().isInfoEnabled()) {
>             StringBuffer logBuffer =
>                 new StringBuffer(128)
>                         .append("Connection from ")
>                         .append(remoteHost)
>                         .append(" (")
>                         .append(remoteIP)
>                         .append(") ");
> 258            getLogger().info(logBuffer.toString());
>         }
>         try {
>            ......
>         } catch (Exception e) {
>          ......
>         } finally {
>             resetHandler();
>         }
>     }



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to