static int try_destroy(machine_t *machine){ // {{{ try_userdata *userdata = (try_userdata *)machine->userdata; fastcall_free r_free = { { 2, ACTION_FREE } }; data_query(&userdata->machine, &r_free); thread_data_destroy(&userdata->thread_data); free(userdata->try_end); free(userdata); return 0; } // }}}
static void event_fork(void *drcontext) { if (!drcov_per_thread) { log_file_create(NULL, global_data); } else { per_thread_t *data = drmgr_get_tls_field(drcontext, tls_idx); if (data != NULL) { thread_data_destroy(drcontext, data); } event_thread_init(drcontext); } }
static void event_thread_exit(void *drcontext) { per_thread_t *data; data = (per_thread_t *)drmgr_get_tls_field(drcontext, tls_idx); ASSERT(data != NULL, "data must not be NULL"); if (drcov_per_thread) { dump_drcov_data(drcontext, data); thread_data_destroy(drcontext, data); } else { /* the per-thread data is a copy of global data */ dr_thread_free(drcontext, data, sizeof(*data)); } }
static void global_data_destroy(per_thread_t *data) { thread_data_destroy(NULL, data); }