已合并
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
已合并
共 1 个文件变更+13-3
| @@ -34,6 +34,16 @@ | |||
| 34 | } \ | 34 | } \ |
| 35 | } while (0) | 35 | } while (0) |
| 36 | 36 | ||
| 37 | + | ||
| 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 | 47 | ||
| 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 printf | 84 | 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) { |