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