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