Skip to content

Commit c7f6085

Browse files
committed
[DevSanitizer] Fix event and usm leak in sanitizer layer
Signed-off-by: Zhao, Maosu <maosu.zhao@intel.com>
1 parent 679e66d commit c7f6085

File tree

6 files changed

+43
-27
lines changed

6 files changed

+43
-27
lines changed

unified-runtime/source/loader/layers/sanitizer/asan/asan_buffer.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ ur_result_t EnqueueMemCopyRectHelper(
6666
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(Queue, Events.size(),
6767
Events.data(), Event));
6868

69+
for (auto &E : Events)
70+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
71+
6972
return UR_RESULT_SUCCESS;
7073
}
7174

unified-runtime/source/loader/layers/sanitizer/msan/msan_buffer.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ ur_result_t EnqueueMemCopyRectHelper(
106106
&Events[0], Event));
107107
}
108108

109+
for (auto &E : Events)
110+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
111+
109112
return UR_RESULT_SUCCESS;
110113
}
111114

unified-runtime/source/loader/layers/sanitizer/msan/msan_ddi.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,9 @@ ur_result_t urEnqueueMemBufferWrite(
831831
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
832832
hQueue, Events.size(), Events.data(), phEvent));
833833
}
834+
835+
for (auto &E : Events)
836+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
834837
} else {
835838
UR_CALL(pfnMemBufferWrite(hQueue, hBuffer, blockingWrite, offset, size,
836839
pSrc, numEventsInWaitList, phEventWaitList,
@@ -1029,6 +1032,9 @@ ur_result_t urEnqueueMemBufferCopy(
10291032
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
10301033
hQueue, Events.size(), Events.data(), phEvent));
10311034
}
1035+
1036+
for (auto &E : Events)
1037+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
10321038
} else {
10331039
UR_CALL(pfnMemBufferCopy(hQueue, hBufferSrc, hBufferDst, srcOffset,
10341040
dstOffset, size, numEventsInWaitList,
@@ -1159,6 +1165,9 @@ ur_result_t urEnqueueMemBufferFill(
11591165
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
11601166
hQueue, Events.size(), Events.data(), phEvent));
11611167
}
1168+
1169+
for (auto &E : Events)
1170+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
11621171
} else {
11631172
UR_CALL(pfnMemBufferFill(hQueue, hBuffer, pPattern, patternSize, offset,
11641173
size, numEventsInWaitList, phEventWaitList,
@@ -1487,6 +1496,9 @@ ur_result_t UR_APICALL urEnqueueUSMFill(
14871496
hQueue, Events.size(), Events.data(), phEvent));
14881497
}
14891498

1499+
for (auto &E : Events)
1500+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
1501+
14901502
return UR_RESULT_SUCCESS;
14911503
}
14921504

@@ -1558,6 +1570,9 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy(
15581570
hQueue, Events.size(), Events.data(), phEvent));
15591571
}
15601572

1573+
for (auto &E : Events)
1574+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
1575+
15611576
return UR_RESULT_SUCCESS;
15621577
}
15631578

@@ -1621,6 +1636,9 @@ ur_result_t UR_APICALL urEnqueueUSMFill2D(
16211636
hQueue, Events.size(), Events.data(), phEvent));
16221637
}
16231638

1639+
for (auto &E : Events)
1640+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
1641+
16241642
return UR_RESULT_SUCCESS;
16251643
}
16261644

@@ -1703,6 +1721,9 @@ ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
17031721
hQueue, Events.size(), Events.data(), phEvent));
17041722
}
17051723

1724+
for (auto &E : Events)
1725+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
1726+
17061727
return UR_RESULT_SUCCESS;
17071728
}
17081729

unified-runtime/source/loader/layers/sanitizer/msan/msan_shadow.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,16 @@ ur_result_t MsanShadowMemoryGPU::Destory() {
166166
static ur_result_t Result = [this]() {
167167
auto Result = getContext()->urDdiTable.VirtualMem.pfnFree(
168168
Context, (const void *)ShadowBegin, GetShadowSize());
169+
if (PrivateShadowOffset != 0) {
170+
UR_CALL(getContext()->urDdiTable.USM.pfnFree(
171+
Context, (void *)PrivateShadowOffset));
172+
PrivateShadowOffset = 0;
173+
}
174+
if (LocalShadowOffset != 0) {
175+
UR_CALL(getContext()->urDdiTable.USM.pfnFree(Context,
176+
(void *)LocalShadowOffset));
177+
LocalShadowOffset = 0;
178+
}
169179
getContext()->urDdiTable.Context.pfnRelease(Context);
170180
return Result;
171181
}();

unified-runtime/source/loader/layers/sanitizer/tsan/tsan_buffer.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ ur_result_t EnqueueMemCopyRectHelper(
7474
&Events[0], Event));
7575
}
7676

77+
for (auto &E : Events)
78+
UR_CALL(getContext()->urDdiTable.Event.pfnRelease(E));
79+
7780
return UR_RESULT_SUCCESS;
7881
}
7982

unified-runtime/source/loader/layers/sanitizer/tsan/tsan_ddi.cpp

+3-27
Original file line numberDiff line numberDiff line change
@@ -484,18 +484,10 @@ ur_result_t urEnqueueMemBufferWrite(
484484
if (auto MemBuffer = getTsanInterceptor()->getMemBuffer(hBuffer)) {
485485
ur_device_handle_t Device = GetDevice(hQueue);
486486
char *pDst = nullptr;
487-
std::vector<ur_event_handle_t> Events;
488-
ur_event_handle_t Event{};
489487
UR_CALL(MemBuffer->getHandle(Device, pDst));
490488
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy(
491489
hQueue, blockingWrite, pDst + offset, pSrc, size, numEventsInWaitList,
492-
phEventWaitList, &Event));
493-
Events.push_back(Event);
494-
495-
if (phEvent) {
496-
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
497-
hQueue, Events.size(), Events.data(), phEvent));
498-
}
490+
phEventWaitList, phEvent));
499491
} else {
500492
UR_CALL(getContext()->urDdiTable.Enqueue.pfnMemBufferWrite(
501493
hQueue, hBuffer, blockingWrite, offset, size, pSrc, numEventsInWaitList,
@@ -664,17 +656,9 @@ ur_result_t urEnqueueMemBufferCopy(
664656
char *DstHandle = nullptr;
665657
UR_CALL(DstBuffer->getHandle(Device, DstHandle));
666658

667-
std::vector<ur_event_handle_t> Events;
668-
ur_event_handle_t Event{};
669659
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMMemcpy(
670660
hQueue, false, DstHandle + dstOffset, SrcHandle + srcOffset, size,
671-
numEventsInWaitList, phEventWaitList, &Event));
672-
Events.push_back(Event);
673-
674-
if (phEvent) {
675-
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
676-
hQueue, Events.size(), Events.data(), phEvent));
677-
}
661+
numEventsInWaitList, phEventWaitList, phEvent));
678662
} else {
679663
UR_CALL(getContext()->urDdiTable.Enqueue.pfnMemBufferCopy(
680664
hQueue, hBufferSrc, hBufferDst, srcOffset, dstOffset, size,
@@ -776,19 +760,11 @@ ur_result_t urEnqueueMemBufferFill(
776760

777761
if (auto MemBuffer = getTsanInterceptor()->getMemBuffer(hBuffer)) {
778762
char *Handle = nullptr;
779-
std::vector<ur_event_handle_t> Events;
780-
ur_event_handle_t Event{};
781763
ur_device_handle_t Device = GetDevice(hQueue);
782764
UR_CALL(MemBuffer->getHandle(Device, Handle));
783765
UR_CALL(getContext()->urDdiTable.Enqueue.pfnUSMFill(
784766
hQueue, Handle + offset, patternSize, pPattern, size,
785-
numEventsInWaitList, phEventWaitList, &Event));
786-
Events.push_back(Event);
787-
788-
if (phEvent) {
789-
UR_CALL(getContext()->urDdiTable.Enqueue.pfnEventsWait(
790-
hQueue, Events.size(), Events.data(), phEvent));
791-
}
767+
numEventsInWaitList, phEventWaitList, phEvent));
792768
} else {
793769
UR_CALL(getContext()->urDdiTable.Enqueue.pfnMemBufferFill(
794770
hQueue, hBuffer, pPattern, patternSize, offset, size,

0 commit comments

Comments
 (0)