diff --git a/hipamd/src/hip_event.cpp b/hipamd/src/hip_event.cpp index e43e8b00e0..815aee9fd5 100644 --- a/hipamd/src/hip_event.cpp +++ b/hipamd/src/hip_event.cpp @@ -308,6 +308,11 @@ hipError_t ihipEventCreateWithFlags(hipEvent_t* event, unsigned flags) { e = new hip::Event(flags); } } + // App might have used combination of flags i.e. hipEventInterprocess|hipEventDisableTiming + // However based on hipEventInterprocess flag, IPCEvent creates even with + // JUST hipEventInterprocess and hence, Actual hipEventInterprocess|hipEventDisableTiming + // flag is getting supressed with hipEventInterprocess + e->flags_ = flags; if (e == nullptr) { return hipErrorOutOfMemory; } diff --git a/hipamd/src/hip_platform.cpp b/hipamd/src/hip_platform.cpp index 11b00ed735..5f0d355172 100644 --- a/hipamd/src/hip_platform.cpp +++ b/hipamd/src/hip_platform.cpp @@ -88,8 +88,13 @@ void __hipRegisterFunction(hip::FatBinaryInfo** modules, const void* hostFunctio return var ? atoi(var) : 1; }()}; hipError_t hip_error = hipSuccess; - hip::Function* func = new hip::Function(std::string(deviceName), modules); - hip_error = PlatformState::instance().registerStatFunction(hostFunction, func); + // Compiler might share same hostFunction and hence it's needless to have another + // hip::Function and hip::Function is stored in map with hostFunction as key. + // Creating hip::Function in such case, Leaks it. + if (PlatformState::instance().getStatFuncName(hostFunction) == nullptr) { + hip::Function* func = new hip::Function(std::string(deviceName), modules); + hip_error = PlatformState::instance().registerStatFunction(hostFunction, func); + } guarantee((hip_error == hipSuccess), "Cannot register Static function, error: %d", hip_error); if (!enable_deferred_loading) {