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

Jens Geyer commented on THRIFT-5162:
------------------------------------

Possible relation to THRIFT-4963 maybe?

> ThreadManager tests fail in appveyor
> ------------------------------------
>
>                 Key: THRIFT-5162
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5162
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.14.0
>            Reporter: Jano Svitok
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Log: 
> [https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/builds/31898731/job/tec853o3sgg2vkht?fullLog=true#L6166]
> Similar happens quite often but not always:
> 423: ThreadManager benchmark tests...
> 423: ThreadManager load test: worker count: 2 task count: 2000 delay: 5
> 423: loaded 2000 tasks to execute
> 423: activeCount = 2000
> 423: first start: 1052596 Last end: 1068271 min: 10ms max: 20ms average: 
> 15.649ms
> 423: Success! expected time: 5000ms elapsed time: 15675ms
> 423: ThreadManager load test: worker count: 8 task count: 8000 delay: 5
> 423: loaded 8000 tasks to execute
> 423: activeCount = 7984
> *423: Assertion failed: delta > 0, file 
> c:\projects\thrift\lib\cpp\test\concurrency\ThreadManagerTests.h, line 162*
> 423/444 Test #423: concurrency_test ...................***Timeout 300.01 sec
> I have not reproduced this locally, nor I tried to come up with a fix, 
> nevertheless I suspect:
> The assertion checks that test task duration was > 0. This calls sleep_ in 
> ThreadManagerTest,.h that calls Monitor::wait() and that calls 
> [std::condition_variable_any::wait_for(duration)|https://en.cppreference.com/w/cpp/thread/condition_variable_any/wait_for].
>  Note to this call says:
> Atomically releases lock, blocks the current executing thread, and adds it to 
> the list of threads waiting on \*this. The thread will be unblocked when 
> notify_all() or notify_one() is executed, or when the relative timeout 
> rel_time expires. IT MAY ALSO BE UNBLOCKED SPURIOUSLY. When unblocked, 
> regardless of the reason, lock is reacquired and wait_for() exits.
> If I am right, then the lib should check which of those three cases happened: 
> 1. notify() called, 2. timeout elapsed 3. something else. This can be 
> implemented using another bool member in Monitor, that is set to true in 
> notify, and to false in waitXXX after condition returns true, and passing 
> predicate returning this bool value.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to