已合并
fix: prevent memory leak in AicpuDumpPrintBuffer on ACL call failure #1098
jianwei10创建于 3月23日
fix: prevent memory leak in AicpuDumpPrintBuffer on ACL call failure #1098
已合并
jianwei10创建于 3月23日
1 个文件变更+13-3
@@ -34,6 +34,16 @@
34 } \34 } \
35 } while (0)35 } while (0)
36 36 
37+#define CHECK_ACL_FREE(x, ptr) \
38+ do { \
39+ aclError __ret = x; \
40+ if (__ret != ACL_ERROR_NONE) { \
41+ ASCENDLOGE("[Check]acl Error: %d.", __ret); \
42+ free(ptr); \
43+ return; \
44+ } \
45+ } while (0)
46+ 
37#define CHECK_ACL_ERR(x) \47#define CHECK_ACL_ERR(x) \
38 do { \48 do { \
39 aclError __ret = x; \49 aclError __ret = x; \
@@ -72,9 +82,9 @@ void AicpuDumpPrintBuffer(const void *dumpBuffer, const size_t bufSize)
72 }82 }
73 memset_s(bufHost, bufSize, 0, bufSize);83 memset_s(bufHost, bufSize, 0, bufSize);
74 aclmdlRICaptureMode mode = ACL_MODEL_RI_CAPTURE_MODE_RELAXED; // support CAPTURE MODE GLOBAL on host, when using device printf84 aclmdlRICaptureMode mode = ACL_MODEL_RI_CAPTURE_MODE_RELAXED; // support CAPTURE MODE GLOBAL on host, when using device printf
75- CHECK_ACL(aclmdlRICaptureThreadExchangeMode(&mode));85+ CHECK_ACL_FREE(aclmdlRICaptureThreadExchangeMode(&mode), bufHost);
76- CHECK_ACL(aclrtMemcpy(bufHost, bufSize, dumpBuffer, bufSize, ACL_MEMCPY_DEVICE_TO_HOST));86+ CHECK_ACL_FREE(aclrtMemcpy(bufHost, bufSize, dumpBuffer, bufSize, ACL_MEMCPY_DEVICE_TO_HOST), bufHost);
77- CHECK_ACL(aclmdlRICaptureThreadExchangeMode(&mode));87+ CHECK_ACL_FREE(aclmdlRICaptureThreadExchangeMode(&mode), bufHost);
78 static thread_local size_t lastOffSet = 8;88 static thread_local size_t lastOffSet = 8;
79 size_t curOffSet = *reinterpret_cast<size_t*>(bufHost);89 size_t curOffSet = *reinterpret_cast<size_t*>(bufHost);
80 if (curOffSet > lastOffSet) {90 if (curOffSet > lastOffSet) {