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

Mark Gertsvolf updated XMLRPC-162:
----------------------------------

    Environment: Linux on PPC - underpowered platform PPC8270  (was: Linux on 
PPC - very slow CPU)
        Summary: WebServer worker thread is stuck on an incoming XML RPC call  
(was: WebServer worker thread is stuck with on an incoming XML RPC call)

> WebServer worker thread is stuck on an incoming XML RPC call
> ------------------------------------------------------------
>
>                 Key: XMLRPC-162
>                 URL: https://issues.apache.org/jira/browse/XMLRPC-162
>             Project: XML-RPC
>          Issue Type: Bug
>    Affects Versions: 3.1.1
>         Environment: Linux on PPC - underpowered platform PPC8270
>            Reporter: Mark Gertsvolf
>
> I am running XML-RPC server on an underpowered Linux PPC box with JamVM or 
> Cacao, both use GNU classlib. This environment exposes a race condition in 
> the WebServer code.
> Specificlly the issue is with how org.apache.xmlrpc.util.ThreadPool signals 
> the worker threads.
> Poolable.startTask creates a new Poolable object  and calls Poolable.start, 
> which sets the Poolable.task member and signals the thread encapsulated by 
> Poolable object. However, there is a potential race condition where the 
> signal can be lost if the encapsulated thread has just pased beyond the 
> getTask check:
> (line 55 trunk/common/src/main/java/org/apache/xmlrpc/util/ThreadPool.java - 
> revision 720508)
> The worker thread is suspended on wait and there is nobody to wake him up.
> One way of fixing this issue is to add (getTask() == null) check inside the 
> synchronized block.
> diff:
> Index: 
> /var/opt/apachews/trunk/common/src/main/java/org/apache/xmlrpc/util/ThreadPool.java
> ===================================================================
> --- 
> /var/opt/apachews/trunk/common/src/main/java/org/apache/xmlrpc/util/ThreadPool.java
>  (revision 720508)
> +++ 
> /var/opt/apachews/trunk/common/src/main/java/org/apache/xmlrpc/util/ThreadPool.java
>  (working copy)
> @@ -56,7 +56,9 @@
>                          if (t == null) {
>                              try {
>                                  synchronized (this) {
> -                                    wait();
> +                                    if (!isShuttingDown() && getTask() == 
> null) {
> +                                       wait();
> +                                    }
>                                  }
>                              } catch (InterruptedException e) {
>                                  // Do nothing

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to