[mythtv-commits] Ticket #3517: Improvements to ProcessRequestThread pool handling in the MainServer of MythBackend
MythTV
mythtv at cvs.mythtv.org
Sun May 27 22:40:51 UTC 2007
#3517: Improvements to ProcessRequestThread pool handling in the MainServer of
MythBackend
--------------------------------------------------------+-------------------
Reporter: Russell Bryant <russell at russellbryant.net> | Owner: ijr
Type: patch | Status: new
Priority: minor | Milestone: unknown
Component: mythtv | Version: unknown
Severity: medium |
--------------------------------------------------------+-------------------
The attached patch provides some improvements to the handling of the
request processing thread pool in the MainServer of MythBackend.
* In the ProcessRequestThread class, both the setup() and killit()
functions unlocked the mutex before signalling the wait condition. The
patch moves the unlock to be *after* the condition is signalled, to remove
the possibility of a race condition between the thread waiting on the
condition and the thread signaling the condition.
* The rest of the changes rework the way a thread is acquired from the
thread pool. I will explain the previous behavior, as well as the
behavior after the patch.
=== Previous Behavior ===
The code created a timer and checked the container of idle threads once
every millisecond, locking and unlocking the mutex each time, until a
thread was acquired. If a thread was not acquired after a total of 10 ms,
it would create a new one.
When creating a new thread, the code would wait 50 ms to attempt to ensure
that the new thread is up and running before continuing.
=== New behavior ===
The code attempts to retrieve a thread from the thread pool. If one is
not available, it uses a thread condition to wait for up to 10 ms until
one becomes available. When threads become available, this condition is
signaled to wake up anyone waiting on an idle thread.
Also, when a ProcessRequestThread is created, it uses a thread condition
to wait for the thread to be up and running. This both ensures that the
code does wait long enough, and also doesn't wait any longer than it needs
to.
Also, in the MainServer constructor, it now uses this thread condition to
ensure that each thread created for the thread pool is running before
moving on. Previously, this check was not done here.
--
Ticket URL: <http://svn.mythtv.org/trac/ticket/3517>
MythTV <http://svn.mythtv.org/trac>
MythTV
More information about the mythtv-commits
mailing list