Opened 10 years ago

Closed 10 years ago

#7464 closed Bugs (fixed)

BOOST_TEST(n_alive == 1); fails due to race condition in a regression test tool

Reported by: greg.nowakowski@… Owned by: viboes
Milestone: Boost 1.53.0 Component: thread
Version: Boost 1.51.0 Severity: Regression
Keywords: thread, regression, race condition Cc: kurt.miller@…

Description

This problem is at least from boost_1_50_0 Using gcc-4.1.2, but it has nothing to do with the bug. Platform Linux.

All libs/thread/test modules that test n_avail are having race condition which make cause regression test to fail here :

  void operator()()
  {
    BOOST_TEST(alive_ == 1);
    BOOST_TEST(n_alive == 1); // race condition error
    op_run = true;
  }

Rationale:

When the G() object is being passed, copy constructor is used to copy the object. Then boost::detail::thread_data<G>::run() is executed and G::operator()() called. If this operator is called before the main thread calls ~G(), n_avail may be 2. It is a very rare case to have the new thread execute operator()() before the main thread, and that is why it is so difficult to catch it.

Blessings, Greg.

Change History (3)

comment:1 by viboes, 10 years ago

Component: Regression Testingthread
Owner: changed from René Rivera to viboes
Status: newassigned

comment:2 by viboes, 10 years ago

Milestone: To Be DeterminedBoost 1.53.0

Changeset [82455] by viboes

comment:3 by viboes, 10 years ago

Resolution: fixed
Status: assignedclosed

Committed revision [82491].

Note: See TracTickets for help on using tickets.