This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.

### 967. Various threading bugs #17

Section: 32.4.3.3 [thread.thread.constr] Status: C++11 Submitter: Pete Becker Opened: 2009-01-07 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [thread.thread.constr].

View all issues with C++11 status.

Discussion:

the error handling for the constructor for `condition_variable` distinguishes lack of memory from lack of other resources, but the error handling for the thread constructor does not. Is this difference intentional?

[ Beman has volunteered to provide proposed wording. ]

[ 2009-09-25 Beman provided proposed wording. ]

> The proposed resolution assumes 962 has been accepted and its proposed resolution applied to the working paper.

[ 2009-10 Santa Cruz: ]

> Move to Ready.

Proposed resolution:

Change Mutex requirements 32.5.4 [thread.mutex.requirements], paragraph 4, as indicated:

> Error conditions:

> > - `not_enough_memory` — if there is not enough memory to construct the mutex object.
> > - `resource_unavailable_try_again` — if any native handle type manipulated is not available.
> > - `operation_not_permitted` — if the thread does not have the necessary permission to change the state of the mutex object.
> > - `device_or_resource_busy` — if any native handle type manipulated is already locked.
> > - `invalid_argument` — if any native handle type manipulated as part of mutex construction is incorrect.

Change Class `condition_variable` 32.6.4 [thread.condition.condvar], default constructor, as indicated:

> `condition_variable();`

> > Effects: Constructs an object of type `condition_variable`.

> > Throws: `std::system_error` when an exception is required (32.2.2 [thread.req.exception]).

> > Error conditions:

> > > - `not_enough_memory` — if a memory limitation prevents initialization.
> > > - `resource_unavailable_try_again` — if some non-memory resource limitation prevents initialization.
> > > - `device_or_resource_busy` — if attempting to initialize a previously-initialized but as of yet undestroyed `condition_variable`.