fix GC issue in c#

Store a reference to the unmanaged delegate so that the c# garbage collector doesn't wipe it out which causes a hard crash since the unmanaged dll is still referencing it.
This commit is contained in:
MoogleTroupe
2021-03-09 20:52:24 -05:00
committed by GitHub
parent e6b439acb5
commit 5ba67d918d

View File

@@ -39,6 +39,7 @@ namespace ZeroTier.Core
string _configFilePath;
ushort _servicePort;
static ZeroTierManagedEventCallback _managedCallback;
CSharpCallbackWithStruct _unmanagedCallback;
// Callback used internally to ferry events from the C++ layer
static void OnZeroTierEvent(IntPtr msgPtr)
@@ -226,7 +227,8 @@ namespace ZeroTier.Core
if (_hasBeenFreed == true) {
throw new ObjectDisposedException("ZeroTier Node has previously been freed. Restart application to create new instance.");
}
return zts_start(_configFilePath,OnZeroTierEvent,_servicePort);
_unmanagedCallback = OnZeroTierEvent;
return zts_start(_configFilePath,_unmanagedCallback,_servicePort);
}
/// <summary>