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

Roger Meier resolved THRIFT-488.
--------------------------------

    Resolution: Fixed

it's old...
Please create a new ticket if you have new ideas on this.

;-r
                
> ThreadManager crashing bugs
> ---------------------------
>
>                 Key: THRIFT-488
>                 URL: https://issues.apache.org/jira/browse/THRIFT-488
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.1
>         Environment: Mac OS X 10.5.6, Xcode
>            Reporter: Rush Manbert
>         Attachments: ThreadManagerAssertPatch.txt, ThreadManager.cpp.patch, 
> ThreadManagerWeakPtr.txt
>
>
> The ThreadManager::Impl and the ThreadManager::Worker classes work together 
> to execute client threads. There are race conditions between the two classes 
> that can cause Bus Error exceptions in certain cases. In general, these occur 
> when a ThreadManager instance is destructed, so might not be seen in long 
> running programs. They happen frequently enough, though, that looped 
> repetitions of ThreadManagerTests::blockTest() (part of the concurrency_test 
> program) fail quite often.
> These errors are generally not seen with the current version of 
> ThreadManagerTests::blockTest() due to errors in the test itself that cause 
> failures at a far higher frequency. In order to see them, you need to apply 
> the patches that are attached to THRIFT-487 
> (https://issues.apache.org/jira/browse/THRIFT-487).
> Test procedure:
> 1) Apply the patch from THRIFT-487 for the Tests.cpp file.
> 2) Run make in lib/cpp in order to rebuild concurrency_test
> 3) Run concurrency_test with the command line argument "thread-manager" and 
> observe that the test hangs in no time.
> 4) Apply the patch from THRIFT-487 for the ThreadManagerTests.h file.
> 5) Run make in lib/cpp
> 6) Run concurrency_test as before. Observe that now it runs for longer 
> (generally) and usually fails with an assert in Monitor.cpp. This failure is 
> because of one of the bugs in ThreadManager.
> 7) Apply the attached patch file for ThreadManager.cpp
> 8) Run make in lib/cpp
> 9) Run concurrency_test as before. It should just run, and run, and run.
> Note that there is a possible path through the original 
> ThreadManager::Worker::run() method where active never becomes true. In 
> practice, exercising this code path is difficuly. The way that I exercised it 
> was to edit line 322 in the patched version of ThreadManager.cpp. I changed 
> the for statement to read:
> for (size_t ix = 0; ix < value + 1; ix++)
> so that the ThreadManager always created more workers than were needed. That 
> extra worker caused quite a bit of trouble until I moved his handling up to 
> the top of the run() method. I don't understand how this situation could 
> occur in real life, but this code appears to handle it correctly.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to