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