void chpl_task_stdModulesInitialized(void) { // // The task table is implemented in Chapel code in the modules, so // we can't use it, and thus can't support task reporting on ^C or // deadlock, until the other modules on which it depends have been // initialized and the supporting code here is set up. In this // function we're guaranteed that is true, because it is called only // after all the standard module initialization is complete. // // // Register this main task in the task table. // if (taskreport) { thread_private_data_t* tp = chpl_thread_getPrivateData(); chpldev_taskTable_add(tp->ptask->bundle.id, tp->ptask->bundle.lineno, tp->ptask->bundle.filename, (uint64_t) (intptr_t) tp->ptask); chpldev_taskTable_set_active(tp->ptask->bundle.id); chpl_thread_mutexInit(&taskTable_lock); } // // Now we can do task reporting if the user requested it. // do_taskReport = taskreport; }
// // Get the the thread private data pointer for my thread. // static thread_private_data_t* get_thread_private_data(void) { thread_private_data_t* tp; tp = (thread_private_data_t*) chpl_thread_getPrivateData(); if (tp == NULL) chpl_internal_error("no thread private data"); return tp; }
// // When a thread is destroyed it calls this ending function. // static void thread_end(void) { thread_private_data_t* tp; tp = (thread_private_data_t*) chpl_thread_getPrivateData(); if (tp != NULL) { if (tp->lockRprt != NULL) { chpl_mem_free(tp->lockRprt, 0, 0); tp->lockRprt = NULL; } chpl_mem_free(tp, 0, 0); chpl_thread_setPrivateData(NULL); } }