SWDEV-388249: WIP - Fixed few memory leaks

Change-Id: I97eb348c7715ac166f48cee3fd3d1b702d355948


[ROCm/rocprofiler commit: c07eff437f]
Этот коммит содержится в:
Giovanni LB
2023-04-24 17:58:46 -03:00
родитель ee2c45a25e
Коммит 7cf679e483
2 изменённых файлов: 17 добавлений и 6 удалений
+9 -4
Просмотреть файл
@@ -216,7 +216,7 @@ class file_plugin_t {
session_id, ROCPROFILER_HSA_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
char* function_name_c = (char*)malloc(function_name_size);
char* function_name_c = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_hsa_tracer_api_data_info(
session_id, ROCPROFILER_HSA_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_c));
@@ -229,7 +229,7 @@ class file_plugin_t {
session_id, ROCPROFILER_HIP_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_size));
if (function_name_size > 1) {
char* function_name_c = (char*)malloc(function_name_size);
char* function_name_c = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
session_id, ROCPROFILER_HIP_FUNCTION_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &function_name_c));
@@ -240,11 +240,15 @@ class file_plugin_t {
session_id, ROCPROFILER_HIP_KERNEL_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &kernel_name_size));
if (kernel_name_size > 1) {
char* kernel_name_str = (char*)malloc(kernel_name_size * sizeof(char));
char* kernel_name_str = nullptr;
CHECK_ROCPROFILER(rocprofiler_query_hip_tracer_api_data_info(
session_id, ROCPROFILER_HIP_KERNEL_NAME, tracer_record.api_data_handle,
tracer_record.operation_id, &kernel_name_str));
if (kernel_name_str) kernel_name = rocmtools::cxx_demangle(std::string(kernel_name_str));
if (kernel_name_str) {
kernel_name = rocmtools::cxx_demangle(std::string(kernel_name_str));
free(kernel_name_str);
// TODO: Change how this API returns a string.
}
}
}
if (tracer_record.domain == ACTIVITY_DOMAIN_ROCTX) {
@@ -277,6 +281,7 @@ class file_plugin_t {
}
}
}
//return;
output_file_t* output_file = get_output_file(output_type_t::TRACER, tracer_record.domain);
*output_file << "Record(" << tracer_record.header.id.handle << "), Domain("
<< GetDomainName(tracer_record.domain) << "),";
+8 -2
Просмотреть файл
@@ -405,13 +405,16 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
rocprofiler_record.phase = ROCPROFILER_PHASE_NONE;
if (operation_id == HIP_OP_ID_DISPATCH && record->kernel_name != nullptr) {
rocprofiler_record.api_data_handle.handle = strdup(record->kernel_name);
void* initial_handle = const_cast<void*>(rocprofiler_record.api_data_handle.handle);
rocprofiler_record.api_data_handle.size = (strlen(record->kernel_name) + 1);
rocmtools::GetROCMToolObj()
->GetSession((*pool)->session_id)
->GetBuffer((*pool)->buffer_id)
->AddRecord(rocprofiler_record, rocprofiler_record.api_data_handle.handle,
rocprofiler_record.api_data_handle.size,
[](auto& rocprofiler_record, const void* data) {
[initial_handle](auto& rocprofiler_record, const void* data) {
if (rocprofiler_record.api_data_handle.handle==initial_handle)
free(initial_handle);
rocprofiler_record.api_data_handle.handle =
static_cast<const char*>(data);
});
@@ -468,13 +471,16 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
rocprofiler_record.phase = ROCPROFILER_PHASE_NONE;
if (record->kernel_name != nullptr && record->op == HSA_OP_ID_DISPATCH) {
rocprofiler_record.api_data_handle.handle = strdup(record->kernel_name);
void* initial_handle = const_cast<void*>(rocprofiler_record.api_data_handle.handle);
rocprofiler_record.api_data_handle.size = strlen(record->kernel_name) + 1;
rocmtools::GetROCMToolObj()
->GetSession((*pool)->session_id)
->GetBuffer((*pool)->buffer_id)
->AddRecord(rocprofiler_record, rocprofiler_record.api_data_handle.handle,
rocprofiler_record.api_data_handle.size,
[](auto& rocprofiler_record, const void* data) {
[initial_handle](auto& rocprofiler_record, const void* data) {
if (rocprofiler_record.api_data_handle.handle==initial_handle)
free(initial_handle);
rocprofiler_record.api_data_handle.handle =
static_cast<const char*>(data);
});