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

Ivàn Silva commented on HTTPCLIENT-633:
---------------------------------------

Hi group, I need to know what problem Can I have with this extract
org/apache/commons/httpclient/MultiThreadedHttpConnectionManager$Connect
ionPool@0x00000000408C3638/0x00000000408C3644: <unowned>                
Waiting to be notified:                                                 
   "WebContainer : 0" (0x0000000031B71C00)                              
   "WebContainer : 1" (0x0000000031AE6700)                              
   "WebContainer : 2" (0x0000000031E22900)                              
   "WebContainer : 3" (0x000000003202AF00)                              
   "WebContainer : 5" (0x0000000031CCDB00)                              
   "WebContainer : 6" (0x0000000032294B00)                              
     ..................                                                 
     "WebContainer : 55" (0x0000000032620000)                           
     "WebContainer : 56" (0x000000003266F200)                           
     "WebContainer : 58" (0x000000003267CE00)                           
     "WebContainer : 59" (0x000000003267DE00)                           
                                                                        
"WebContainer : 0" J9VMThread:0x0000000031B71C00,                       
j9thread_t:0x000000011A85AD40,                                          
java/lang/Object.wait(Native Method)                                    
                                                                        
java/lang/Object.wait(Object.java:196(Compiled Code))                   
org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.doGetConnectin 
                                                                
org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.getConn
org/apache/commons/httpclient/HttpMethodDirector.executeMethod(HttpMetho
org/apache/commons/httpclient/HttpClient.executeMethod(HttpClient.java:3
org/apache/commons/httpclient/HttpClient.executeMethod(HttpClient.java:3
com/citibank/latam/sgway/service/HttpConnectorImpl.doPost(HttpConnectorI
com/citibank/latam/sgway/service/HttpConnectorImpl.doPost(HttpConnectorI
com/citibank/latam/sgway/service/LegacySgConnector.doPost(LegacySgConnec
com/citibank/latam/sgway/service/LegacySgConnector.authenticateFull(Lega
com/citi/acam/session/impl/SGTokenGenerator.getToken(SGTokenGenerator.ja
com/citi/acam/session/ACAMCredential.<init>(ACAMCredential.java:24(Compi
com/citi/common/transaction/web/CtrlLogin.actionSetLogin(CtrlLogin.java:
com/citi/common/transaction/web/CtrlLogin.doPost(CtrlLogin.java:67(Compi

Can you help me please? Can be MultiThreadedHttpConnectionManager don't 
properly respond to thread interrupts?


> MultiThreadedHttpConnectionManager does not properly respond to thread 
> interrupts
> ---------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-633
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-633
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 3.1 Beta 1
>            Reporter: John Goodwin
>            Assignee: Michael Becke
>             Fix For: 3.1 RC1
>
>         Attachments: mthcm-interruption.patch, mthcm-interruption.patch
>
>
> MultiThreadedHttpConnectionManager uses interrupts to notify waiting threads 
> when a connection is ready for them. Issues arise if the threads are 
> interrupted by someone else while they are still waiting on a thread, because 
> doGetConnection does not remove the threads from the queue of waiting threads 
> when they are interrupted:
>                         connectionPool.wait(timeToWait);
>                         // we have not been interrupted so we need to remove 
> ourselves from the 
>                         // wait queue
>                         hostPool.waitingThreads.remove(waitingThread);        
>                 connectionPool.waitingThreads.remove(waitingThread);
>                     } catch (InterruptedException e) {
>                         // do nothing                    } finally {
>                         if (useTimeout) {
>                             endWait = System.currentTimeMillis();
>                             timeToWait -= (endWait - startWait);              
>           }                    }
> Under ordinary circumstances, the queue maintenance is done by the 
> notifyWaitingThread method. However, if the thread is interrupted by any 
> other part of the system, it will (1) not actually be released, since the 
> loop in doGetConnection will force it back to the wait, and (2) will be added 
> the waiting thread to the queue repeatedly, which basically means that the 
> thread will eventually receive the interrupt from notifyWaitingThread at some 
> later point, when it is no longer actually waiting for a connection.
> This code could probably be re-architected to make it less error-prone, but 
> the fundamental issue seems to be the use of interrupts to signal waiting 
> threads, as opposed to something like a notify. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira



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

Reply via email to