boostorg / boostorg/fiber

Assert on: ctx->remote_ready_is_linked() on cond_var.wait_for(..)

Đang mở
#259 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
C++
Star
510
Fork
123
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

Situation:
0. I use boost 1.69
1. Have one thread pool (TP) with shared_work algo started on it.
2. fibers running in TP is waiting on cond_var:
```cpp
boost::fibers::mutex _mtx;
boost::fibers::condition_variable _condition;
...

std::unique_lock lock{ _mtx };
if (!_condition.wait_for(lock, WaitTimeout(), GetWaitPredicate()))
throw std::runtime_error{ __FUNCTION__": pontentially lost" };

```
2. I Have other threads (not in thread pool, round_robin default scheduler). Where I notify cv:
```cpp
std::unique_lock lock{ _mtx };
// fullfill predicate somehow:
_condition.notify_all();
```

If I build the program with assertions I got very fast the assert:
```cpp
void
scheduler::sleep2ready_() noexcept {
// move context which the deadline has reached
// to ready-queue
// sleep-queue is sorted (ascending)
std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
sleep_queue_type::iterator e = sleep_queue_.end();
for ( sleep_queue_type::iterator i = sleep_queue_.begin(); i != e;) {
context * ctx = & ( * i);
// dipatcher context must never be pushed to sleep-queue
BOOST_ASSERT( ! ctx->is_context( type::dispatcher_context) );
BOOST_ASSERT( main_ctx_ == ctx || ctx->worker_is_linked() );
BOOST_ASSERT( ! ctx->ready_is_linked() );
#if ! defined(BOOST_FIBERS_NO_ATOMICS)
BOOST_ASSERT( ! ctx->remote_ready_is_linked() ); <---- THIS ASSERT
#endif
...
```

As far As I understand the fiber can be waked up by timer or by notification from another thread and this is not allowed by this assert. How can I fix the issue?

**P.S. When I changed wait_for() -> wait() the assert is gone!**

Thanks!

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.