[
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.