@@ -111,21 +111,25 @@ class KernelProgramCache {
111
111
};
112
112
113
113
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) {
116
116
Val = nullptr ;
117
117
}
118
118
ProgramBuildResult (const AdapterPtr &Adapter, BuildState InitialState)
119
- : Adapter (Adapter) {
119
+ : AdapterWeakPtr (Adapter) {
120
120
Val = nullptr ;
121
121
this ->State .store (InitialState);
122
122
}
123
123
~ProgramBuildResult () {
124
124
try {
125
125
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
+ }
129
133
}
130
134
} catch (std::exception &e) {
131
135
__SYCL_REPORT_EXCEPTION_TO_STREAM (" exception in ~ProgramBuildResult" ,
@@ -197,16 +201,20 @@ class KernelProgramCache {
197
201
using KernelArgMaskPairT =
198
202
std::pair<ur_kernel_handle_t , const KernelArgMask *>;
199
203
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) {
202
206
Val.first = nullptr ;
203
207
}
204
208
~KernelBuildResult () {
205
209
try {
206
210
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
+ }
210
218
}
211
219
} catch (std::exception &e) {
212
220
__SYCL_REPORT_EXCEPTION_TO_STREAM (" exception in ~KernelBuildResult" , e);
0 commit comments