@@ -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