Skip to content

Commit 4c22448

Browse files
authored
[SYCL] Store the Adapter as weak_ptr in build results (#17802)
1 parent fb6c188 commit 4c22448

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

sycl/source/detail/kernel_program_cache.hpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,21 +111,25 @@ class KernelProgramCache {
111111
};
112112

113113
struct ProgramBuildResult : public BuildResult<ur_program_handle_t> {
114-
AdapterPtr Adapter;
115-
ProgramBuildResult(const AdapterPtr &Adapter) : Adapter(Adapter) {
114+
std::weak_ptr<Adapter> AdapterWeakPtr;
115+
ProgramBuildResult(const AdapterPtr &Adapter) : AdapterWeakPtr(Adapter) {
116116
Val = nullptr;
117117
}
118118
ProgramBuildResult(const AdapterPtr &Adapter, BuildState InitialState)
119-
: Adapter(Adapter) {
119+
: AdapterWeakPtr(Adapter) {
120120
Val = nullptr;
121121
this->State.store(InitialState);
122122
}
123123
~ProgramBuildResult() {
124124
try {
125125
if (Val) {
126-
ur_result_t Err =
127-
Adapter->call_nocheck<UrApiKind::urProgramRelease>(Val);
128-
__SYCL_CHECK_UR_CODE_NO_EXC(Err);
126+
AdapterPtr AdapterSharedPtr = AdapterWeakPtr.lock();
127+
if (AdapterSharedPtr) {
128+
ur_result_t Err =
129+
AdapterSharedPtr->call_nocheck<UrApiKind::urProgramRelease>(
130+
Val);
131+
__SYCL_CHECK_UR_CODE_NO_EXC(Err);
132+
}
129133
}
130134
} catch (std::exception &e) {
131135
__SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~ProgramBuildResult",
@@ -197,16 +201,20 @@ class KernelProgramCache {
197201
using KernelArgMaskPairT =
198202
std::pair<ur_kernel_handle_t, const KernelArgMask *>;
199203
struct KernelBuildResult : public BuildResult<KernelArgMaskPairT> {
200-
AdapterPtr Adapter;
201-
KernelBuildResult(const AdapterPtr &Adapter) : Adapter(Adapter) {
204+
std::weak_ptr<Adapter> AdapterWeakPtr;
205+
KernelBuildResult(const AdapterPtr &Adapter) : AdapterWeakPtr(Adapter) {
202206
Val.first = nullptr;
203207
}
204208
~KernelBuildResult() {
205209
try {
206210
if (Val.first) {
207-
ur_result_t Err =
208-
Adapter->call_nocheck<UrApiKind::urKernelRelease>(Val.first);
209-
__SYCL_CHECK_UR_CODE_NO_EXC(Err);
211+
AdapterPtr AdapterSharedPtr = AdapterWeakPtr.lock();
212+
if (AdapterSharedPtr) {
213+
ur_result_t Err =
214+
AdapterSharedPtr->call_nocheck<UrApiKind::urKernelRelease>(
215+
Val.first);
216+
__SYCL_CHECK_UR_CODE_NO_EXC(Err);
217+
}
210218
}
211219
} catch (std::exception &e) {
212220
__SYCL_REPORT_EXCEPTION_TO_STREAM("exception in ~KernelBuildResult", e);

0 commit comments

Comments
 (0)