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");
+ }
}
}
}