Opened 4 years ago
Last modified 4 years ago
#13562 new Bugs
Missing null pointer check in compensating_work_started
Reported by: | Owned by: | chris_kohlhoff | |
---|---|---|---|
Milestone: | To Be Determined | Component: | asio |
Version: | Boost 1.66.0 | Severity: | Problem |
Keywords: | Cc: |
Description
In boost/asio/detail/impl/scheduler.ipp(275):
void scheduler::compensating_work_started() { thread_info_base* this_thread = thread_call_stack::contains(this); ++static_cast<thread_info*>(this_thread)->private_outstanding_work; }
there is a missing null pointer check for this_thread, other routines have one!
I saw the error comming from boost/asio/detail/impl/epoll_reactor.ipp(712):
688 struct epoll_reactor::perform_io_cleanup_on_block_exit 689 { 690 explicit perform_io_cleanup_on_block_exit(epoll_reactor* r) 691 : reactor_(r), first_op_(0) 692 { 693 } 694 695 ~perform_io_cleanup_on_block_exit() 696 { 697 if (first_op_) 698 { 699 // Post the remaining completed operations for invocation. 700 if (!ops_.empty()) 701 reactor_->scheduler_.post_deferred_completions(ops_); 702 703 // A user-initiated operation has completed, but there's no need to 704 // explicitly call work_finished() here. Instead, we'll take advantage of 705 // the fact that the scheduler will call work_finished() once we return. 706 } 707 else 708 { 709 // No user-initiated operations have completed, so we need to compensate 710 // for the work_finished() call that the scheduler will make once this 711 // operation returns. 712 reactor_->scheduler_.compensating_work_started(); 713 } 714 }
Note:
See TracTickets
for help on using tickets.
Just found this ticket while googling for a crash I'm currently trying to fix:
The relevant TLS entry is null:
Reproduces when an executable linked against multiple shared libraries that are linked against static boost.