@@ -111,20 +111,21 @@ 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+ AdapterPtr AdapterSharedPtr = AdapterWeakPtr.lock ();
126127 ur_result_t Err =
127- Adapter ->call_nocheck <UrApiKind::urProgramRelease>(Val);
128+ AdapterSharedPtr ->call_nocheck <UrApiKind::urProgramRelease>(Val);
128129 __SYCL_CHECK_UR_CODE_NO_EXC (Err);
129130 }
130131 } catch (std::exception &e) {
@@ -197,15 +198,16 @@ class KernelProgramCache {
197198 using KernelArgMaskPairT =
198199 std::pair<ur_kernel_handle_t , const KernelArgMask *>;
199200 struct KernelBuildResult : public BuildResult <KernelArgMaskPairT> {
200- AdapterPtr Adapter;
201- KernelBuildResult (const AdapterPtr &Adapter) : Adapter (Adapter) {
201+ std::weak_ptr< Adapter> AdapterWeakPtr ;
202+ KernelBuildResult (const AdapterPtr &Adapter) : AdapterWeakPtr (Adapter) {
202203 Val.first = nullptr ;
203204 }
204205 ~KernelBuildResult () {
205206 try {
206207 if (Val.first ) {
208+ AdapterPtr AdapterSharedPtr = AdapterWeakPtr.lock ();
207209 ur_result_t Err =
208- Adapter ->call_nocheck <UrApiKind::urKernelRelease>(Val.first );
210+ AdapterSharedPtr ->call_nocheck <UrApiKind::urKernelRelease>(Val.first );
209211 __SYCL_CHECK_UR_CODE_NO_EXC (Err);
210212 }
211213 } catch (std::exception &e) {
0 commit comments