Fix a hang in './test/hsa/ctrl ctrl_hsa_input_trace'
At the end of the test, the tracer tool is unloaded and the active memory pools are flushed. In the flush callback, to get the activity operation string, the RocpLoader instance is neeeded, and if the RocpLoader is not already loaded, it attempts to dlopen the rocprofiler library. Calling dlopen from a global destructor hangs because the dynamic loader lock is already owned (e.g. by dlclose). To temporarily work around the issue, instanciate the RocpLoader when the activities needing it are enabled. Change-Id: I712c66d88c43694fe53a95d6a61d7b22abb75262
이 커밋은 다음에 포함됨:
1 부모
4ced94b9a2
커밋
11887f596a
1 파일이 변경됨
+2
@@ -939,6 +939,7 @@ static roctracer_status_t roctracer_enable_activity_fun(roctracer_domain_t domai
|
||||
switch (domain) {
|
||||
case ACTIVITY_DOMAIN_HSA_OPS: {
|
||||
if (op == HSA_OP_ID_COPY) {
|
||||
roctracer::RocpLoader::Instance();
|
||||
roctracer::hsa_support::async_copy_callback_enabled = true;
|
||||
roctracer::hsa_support::async_copy_callback_memory_pool =
|
||||
reinterpret_cast<roctracer::MemoryPool*>(pool);
|
||||
@@ -958,6 +959,7 @@ static roctracer_status_t roctracer_enable_activity_fun(roctracer_domain_t domai
|
||||
case ACTIVITY_DOMAIN_HSA_API:
|
||||
break;
|
||||
case ACTIVITY_DOMAIN_HSA_EVT:
|
||||
roctracer::RocpLoader::Instance();
|
||||
break;
|
||||
case ACTIVITY_DOMAIN_HIP_OPS: {
|
||||
if (roctracer::HipLoader::Instance().Enabled() == false) break;
|
||||
|
||||
새 이슈에서 참조
사용자 차단