deleting consumer thread on pool destruction
This commit is contained in:
+11
-11
@@ -99,9 +99,9 @@ const char* roctracer_error_string();
|
||||
|
||||
// Traced API domains
|
||||
typedef enum {
|
||||
ROCTRACER_DOMAIN_ANY = 0, // Any domain
|
||||
ROCTRACER_DOMAIN_HIP_API = 1, // HIP domain
|
||||
ROCTRACER_DOMAIN_HCC_OPS = 2, // HCC domain
|
||||
ROCTRACER_DOMAIN_ANY = 0, // Any domain
|
||||
ROCTRACER_DOMAIN_HIP_API = 1, // HIP domain
|
||||
ROCTRACER_DOMAIN_HCC_OPS = 2, // HCC domain
|
||||
ROCTRACER_DOMAIN_NUMBER
|
||||
} roctracer_domain_t;
|
||||
|
||||
@@ -140,15 +140,15 @@ typedef hip_cb_fun_t roctracer_api_callback_t;
|
||||
|
||||
// Enable runtime API callbacks
|
||||
roctracer_status_t roctracer_enable_api_callback(
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
uint32_t cid, // API call ID
|
||||
roctracer_api_callback_t callback, // callback function pointer
|
||||
void* arg); // [in/out] callback arg
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
uint32_t cid, // API call ID
|
||||
roctracer_api_callback_t callback, // callback function pointer
|
||||
void* arg); // [in/out] callback arg
|
||||
|
||||
// Disable runtime API callbacks
|
||||
roctracer_status_t roctracer_disable_api_callback(
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
uint32_t cid); // API call ID
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
uint32_t cid); // API call ID
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Activity API
|
||||
@@ -218,13 +218,13 @@ roctracer_pool_t* roctracer_default_pool(
|
||||
|
||||
// Enable activity records logging
|
||||
roctracer_status_t roctracer_enable_api_activity(
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
uint32_t activity_kind, // activity kind
|
||||
roctracer_pool_t* pool = NULL); // memory pool, NULL is a default one
|
||||
|
||||
// Disable activity records logging
|
||||
roctracer_status_t roctracer_disable_api_activity(
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
roctracer_domain_t domain, // runtime API domain
|
||||
uint32_t activity_kind); // activity kind
|
||||
|
||||
// Flush available activity records
|
||||
|
||||
@@ -143,7 +143,13 @@ class MemoryPool {
|
||||
}
|
||||
|
||||
~MemoryPool() {
|
||||
std::lock_guard<mutex_t> lock(write_mutex_);
|
||||
|
||||
Flush();
|
||||
PTHREAD_CALL(pthread_cancel(consumer_thread_));
|
||||
void *res;
|
||||
PTHREAD_CALL(pthread_join(consumer_thread_, &res));
|
||||
if (res != PTHREAD_CANCELED) EXC_ABORT(ROCTRACER_STATUS_ERROR, "consumer thread wasn't stopped correctly");
|
||||
allocator_default(&pool_begin_, 0, alloc_arg_);
|
||||
}
|
||||
|
||||
|
||||
@@ -232,20 +232,22 @@ void activity_callback(const char* begin, const char* end, void* arg) {
|
||||
|
||||
// Initialize function
|
||||
void init_tracing() {
|
||||
// Check tracer domains consitency
|
||||
ROCTRACER_CALL(roctracer_validate_domains());
|
||||
// Enable HIP API callbacks
|
||||
ROCTRACER_CALL(roctracer_enable_api_callback(ROCTRACER_DOMAIN_ANY, 0, hip_api_callback, NULL));
|
||||
// Enable HIP activity tracing
|
||||
roctracer_properties_t properties{};
|
||||
properties.buffer_size = 12;
|
||||
properties.buffer_callback_fun = activity_callback;
|
||||
ROCTRACER_CALL(roctracer_open_pool(&properties));
|
||||
ROCTRACER_CALL(roctracer_enable_api_activity(ROCTRACER_DOMAIN_ANY, 0));
|
||||
// Check tracer domains consitency
|
||||
ROCTRACER_CALL(roctracer_validate_domains());
|
||||
// Enable HIP API callbacks
|
||||
ROCTRACER_CALL(roctracer_enable_api_callback(ROCTRACER_DOMAIN_ANY, 0, hip_api_callback, NULL));
|
||||
// Enable HIP activity tracing
|
||||
roctracer_properties_t properties{};
|
||||
properties.buffer_size = 12;
|
||||
properties.buffer_callback_fun = activity_callback;
|
||||
ROCTRACER_CALL(roctracer_open_pool(&properties));
|
||||
ROCTRACER_CALL(roctracer_enable_api_activity(ROCTRACER_DOMAIN_ANY, 0));
|
||||
}
|
||||
|
||||
void finish_tracing() {
|
||||
ROCTRACER_CALL(roctracer_close_pool());
|
||||
ROCTRACER_CALL(roctracer_disable_api_callback(ROCTRACER_DOMAIN_ANY, 0));
|
||||
ROCTRACER_CALL(roctracer_disable_api_activity(ROCTRACER_DOMAIN_ANY, 0));
|
||||
ROCTRACER_CALL(roctracer_close_pool());
|
||||
}
|
||||
#else
|
||||
void init_tracing() {}
|
||||
|
||||
Reference in New Issue
Block a user