DynamicThreadVector::DynamicThreadVector() : fVector((TLSBlock**)tls_address(TLS_DYNAMIC_THREAD_VECTOR)), fGeneration(NULL) { if (*fVector != NULL) fGeneration = (Generation*)*(void**)*fVector; }
status_t on_exit_thread(void (*callback)(void *), void *data) { callback_node **head = (callback_node **)tls_address(TLS_ON_EXIT_THREAD_SLOT); callback_node *node = malloc(sizeof(callback_node)); if (node == NULL) return B_NO_MEMORY; node->function = callback; node->argument = data; // add this node to the list node->next = *head; *head = node; return B_OK; }
int * _h_errnop(void) { return (int *)tls_address(__gHErrnoTLS); }
int * _errnop(void) { return (int *)tls_address(TLS_ERRNO_SLOT); }