Section: 17.5 [support.start.term] Status: C++11 Submitter: LWG Opened: 2009-06-16 Last modified: 2016-01-28 10:19:27 UTC
Priority: Not Prioritized
View other active issues in [support.start.term].
View all other issues in [support.start.term].
View all issues with C++11 status.
Addresses UK 187
The term "thread safe" is not defined nor used in this context anywhere else in the standard.
Clarify the meaning of "thread safe".
[ 2009 Santa Cruz: ]
The "thread safe" language has already been change in the WP. It was changed to "happen before", but the current WP text is still a little incomplete: "happen before" is binary, but the current WP text only mentions one thing.
Move to Ready.
For the following functions in 17.5 [support.start.term].
extern "C" int at_quick_exit(void (*f)(void)); extern "C++" int at_quick_exit(void (*f)(void));
Edit paragraph 10 as follows. The intent is to provide the other half of the happens before relation; to note indeterminate ordering; and to clean up some formatting.
at_quick_exit()functions register the function pointed to by
fto be called without arguments when
quick_exitis called. It is unspecified whether a call to
at_quick_exit()that does not
happen-before(1.10) will succeed. [Note: the
at_quick_exit()functions shall not introduce a data race (18.104.22.168).
at_quick_exitregistrations are distinct from the
atexitregistrations, and applications may need to call both registration functions with the same argument. —end note]
For the following function.
void quick_exit [[noreturn]] (int status)
Edit paragraph 13 as follows. The intent is to note that thread-local variables may be different.
Effects: Functions registered by calls to
at_quick_exitare called in the reverse order of their registration, except that a function shall be called after any previously registered functions that had already been called at the time it was registered. Objects shall not be destroyed as a result of calling
quick_exit. If control leaves a registered function called by
quick_exitbecause the function does not provide a handler for a thrown exception,
terminate()shall be called. After calling registered functions,
_Exit(status). [Note: The standard file buffers are not flushed. See: ISO C 22.214.171.124. —end note]