<assertions> | |
<assertion id="1" tag="ref:XSH6:33023:33024"> | |
The function | |
void pthread_exit(void *value_ptr); | |
terminates the calling thread and makes the value 'value_ptr' available | |
to any successful join with the terminating thread. | |
</assertion> | |
<assertion id="2" tag="ref:XSH6:33024:33026"> | |
Any cancelation cleanup handlers that have been pushed and not yet popped | |
shall be popped and executed in the reverse order that they were pushed. | |
</assertion> | |
<assertion id="3" tag="ref:XSH6:33026:33028"> | |
After all cancelation cleanup handlers have been executed, if the thread | |
has any thread-specific data, appriopriate destructor functions shall | |
be called in an unspecified order. | |
</assertion> | |
<assertion id="4" tag="ref:XSH6:33028:33030"> | |
Thread termination does not release any application visible process | |
resources include, but not limited to, mutexes and file descriptors, nor | |
does it perform any process-level cleanup actions, including but not | |
limited to, calling any atexit() routines that may exist. | |
</assertion> | |
<assertion id="5" tag="ref:XSH6:33031:33033"> | |
An implicit call to pthread_exit() is made when a thread other than the | |
thread in which main() was first invoked returns from the start routine that | |
was used to create it. The function's return value shall serve as the | |
thread's exit status. | |
</assertion> | |
<assertion id="6" tag="ref:XSH6:33040:33042"> | |
The process shall exit with an exit status of 0 after the last thread has | |
been terminated. The behavior shall be as if the implemenation called exit() | |
with a zero argument at thread termination time. | |
The pthread_exit() function cannot return to its called. | |
</assertion> | |
</assertions> |