Skip to content

Commit 82ae6da

Browse files
committed
Fix tangled COM reference count
On ComInterfaceMarshaller<T>, the pointer of the COM Object must be dereferenced by calling IUnknown.Release
1 parent 527b267 commit 82ae6da

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

SharedStatic.V1Ext_Update1.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,14 @@ private static unsafe HResult LaunchGameFromGameManagerAsync(nint gameManage
172172
InstanceLogger.LogError(ex, "An error has occurred while trying to call LaunchGameFromGameManagerCoreAsync() from the plugin!");
173173
return Marshal.GetHRForException(ex);
174174
}
175+
#if !MANUALCOM
176+
finally
177+
{
178+
ComInterfaceMarshaller<IPlugin>.Free((void*)pluginP);
179+
ComInterfaceMarshaller<IGameManager>.Free((void*)gameManagerP);
180+
ComInterfaceMarshaller<IPluginPresetConfig>.Free((void*)presetConfigP);
181+
}
182+
#endif
175183
}
176184

177185
/// <summary>
@@ -223,6 +231,13 @@ private static unsafe HResult IsGameRunning(nint gameManagerP, nint presetConfig
223231
InstanceLogger.LogError(ex, "An error has occurred while trying to call IsGameRunningCore() from the plugin!");
224232
return Marshal.GetHRForException(ex);
225233
}
234+
#if !MANUALCOM
235+
finally
236+
{
237+
ComInterfaceMarshaller<IGameManager>.Free((void*)gameManagerP);
238+
ComInterfaceMarshaller<IPluginPresetConfig>.Free((void*)presetConfigP);
239+
}
240+
#endif
226241
}
227242

228243
/// <summary>
@@ -290,6 +305,14 @@ private static unsafe HResult WaitRunningGameAsync(nint gameManagerP, nint plugi
290305
InstanceLogger.LogError(ex, "An error has occurred while trying to call WaitRunningGameCoreAsync() from the plugin!");
291306
return Marshal.GetHRForException(ex);
292307
}
308+
#if !MANUALCOM
309+
finally
310+
{
311+
ComInterfaceMarshaller<IPlugin>.Free((void*)pluginP);
312+
ComInterfaceMarshaller<IGameManager>.Free((void*)gameManagerP);
313+
ComInterfaceMarshaller<IPluginPresetConfig>.Free((void*)presetConfigP);
314+
}
315+
#endif
293316
}
294317

295318
/// <summary>
@@ -340,6 +363,13 @@ private static unsafe HResult KillRunningGame(nint gameManagerP, nint presetConf
340363
InstanceLogger.LogError(ex, "An error has occurred while trying to call KillRunningGameCore() from the plugin!");
341364
return Marshal.GetHRForException(ex);
342365
}
366+
#if !MANUALCOM
367+
finally
368+
{
369+
ComInterfaceMarshaller<IGameManager>.Free((void*)gameManagerP);
370+
ComInterfaceMarshaller<IPluginPresetConfig>.Free((void*)presetConfigP);
371+
}
372+
#endif
343373
}
344374
#endregion
345375

0 commit comments

Comments
 (0)