[jboss-jira] [JBoss JIRA] Commented: (JBAS-3216) PooledInvokerProxy.getPooledConnection() is not threadsafe

Ola Bini (JIRA) jira-events at jboss.com
Thu Jan 25 11:02:59 EST 2007


    [ http://jira.jboss.com/jira/browse/JBAS-3216?page=comments#action_12351642 ] 
            
Ola Bini commented on JBAS-3216:
--------------------------------

Sorry, I looked at the branch for 4.0.4.GA and compared with 4.0.5.GA and didn't see any change. I should've looked at the tags, of course.

> PooledInvokerProxy.getPooledConnection() is not threadsafe
> ----------------------------------------------------------
>
>                 Key: JBAS-3216
>                 URL: http://jira.jboss.com/jira/browse/JBAS-3216
>             Project: JBoss Application Server
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: Remoting
>    Affects Versions: JBossAS-4.0.4RC1, JBossAS-4.0.3 SP1
>            Reporter: Anders Welen
>         Assigned To: Scott M Stark
>             Fix For: JBossAS-5.0.0.Beta1, JBossAS-4.0.5.CR1
>
>
> Code from 4.0.3SP1
> =================
>    protected ClientSocket getPooledConnection()
>    {
>       ClientSocket socket = null;
>       while (pool.size() > 0)
>       {
>          socket = (ClientSocket)pool.removeFirst();
>          try
>          {
>             // Test to see if socket is alive by send ACK message
>             final byte ACK = 1;
>             socket.out.writeByte(ACK);
>             socket.out.flush();
>             socket.in.readByte();
>             return socket;
>          }
>          catch (Exception ex)
>          {
>             try
>             {
>                socket.socket.close();
>             }
>             catch (Exception ignored) {}
>          }
>       }
>       return null;
>    }
> ===========================
> Should be changed to:
>    protected ClientSocket getPooledConnection()
>    {
>       ClientSocket socket = null;
> synchronized (pool) {
>       while (pool.size() > 0)
>       {
>          socket = (ClientSocket)pool.removeFirst();
>          try
>          {
>             // Test to see if socket is alive by send ACK message
>             final byte ACK = 1;
>             socket.out.writeByte(ACK);
>             socket.out.flush();
>             socket.in.readByte();
>             return socket;
>          }
>          catch (Exception ex)
>          {
>             try
>             {
>                socket.socket.close();
>             }
>             catch (Exception ignored) {}
>          }
>       }
> }
>       return null;
>    }
> ===========================
> ....or perhaps better:
>    protected ClientSocket getPooledConnection()
>    {
>       ClientSocket socket = null;
>       while (pool.size() > 0)
>       {
>          try {
>            socket = (ClientSocket)pool.removeFirst();
>          }
>          catch (java.util.NoSuchElementException nsee)
>          {
>               return null;
>          }
>          try
>          {
>             // Test to see if socket is alive by send ACK message
>             final byte ACK = 1;
>             socket.out.writeByte(ACK);
>             socket.out.flush();
>             socket.in.readByte();
>             return socket;
>          }
>          catch (Exception ex)
>          {
>             try
>             {
>                socket.socket.close();
>             }
>             catch (Exception ignored) {}
>          }
>       }
>       return null;
>    }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list