From f089bd78bb01e5fd64171a37dd1c206838884cd1 Mon Sep 17 00:00:00 2001 From: foreman Date: Wed, 9 Aug 2017 10:07:10 -0400 Subject: [PATCH] P4 to Git Change 1445015 by jatang@jatang-opencl-hsa-stg1 on 2017/08/09 09:53:58 SWDEV-121625 - Fix a memory leak. Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palcompiler.cpp#16 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/roccompiler.cpp#34 edit [ROCm/clr commit: ee246354395e643a302489250269b441aa78cf30] --- .../clr/rocclr/runtime/device/pal/palcompiler.cpp | 12 ++++++++---- .../clr/rocclr/runtime/device/rocm/roccompiler.cpp | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/projects/clr/rocclr/runtime/device/pal/palcompiler.cpp b/projects/clr/rocclr/runtime/device/pal/palcompiler.cpp index ef19c2dfea..ddeb6045e5 100644 --- a/projects/clr/rocclr/runtime/device/pal/palcompiler.cpp +++ b/projects/clr/rocclr/runtime/device/pal/palcompiler.cpp @@ -172,10 +172,14 @@ static void checkLLVM_BIN() { if (llvmBin_.empty()) { Dl_info info; if (dladdr((const void*)&amd::Device::init, &info)) { - llvmBin_ = dirname(strdup(info.dli_fname)); - size_t pos = llvmBin_.rfind("lib"); - if (pos != std::string::npos) { - llvmBin_.replace(pos, 3, "bin"); + char* str = strdup(info.dli_fname); + if (str) { + llvmBin_ = dirname(str); + free(str); + size_t pos = llvmBin_.rfind("lib"); + if (pos != std::string::npos) { + llvmBin_.replace(pos, 3, "bin"); + } } } } diff --git a/projects/clr/rocclr/runtime/device/rocm/roccompiler.cpp b/projects/clr/rocclr/runtime/device/rocm/roccompiler.cpp index aed90cdc2f..e70bc6f640 100644 --- a/projects/clr/rocclr/runtime/device/rocm/roccompiler.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/roccompiler.cpp @@ -367,10 +367,14 @@ static void checkLLVM_BIN() { if (llvmBin_.empty()) { Dl_info info; if (dladdr((const void*)&amd::Device::init, &info)) { - llvmBin_ = dirname(strdup(info.dli_fname)); - size_t pos = llvmBin_.rfind("lib"); - if (pos != std::string::npos) { - llvmBin_.replace(pos, 3, "bin"); + char* str = strdup(info.dli_fname); + if (str) { + llvmBin_ = dirname(str); + free(str); + size_t pos = llvmBin_.rfind("lib"); + if (pos != std::string::npos) { + llvmBin_.replace(pos, 3, "bin"); + } } } }