[CoreFoundation] Fix collected delegate in CFStream. (#10831)
Fixes this fatal error at runtime: > A callback was made on a garbage collected delegate of type 'Xamarin.Mac!CoreFoundation.CFStream+CFStreamCallback::Invoke'.
This commit is contained in:
Родитель
3af399e21f
Коммит
fee2ecf943
|
@ -453,6 +453,8 @@ namespace CoreFoundation {
|
||||||
stream.OnCallback ((CFStreamEventType) (long) type);
|
stream.OnCallback ((CFStreamEventType) (long) type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CFStreamCallback OnCallbackDelegate = OnCallback;
|
||||||
|
|
||||||
protected virtual void OnCallback (CFStreamEventType type)
|
protected virtual void OnCallback (CFStreamEventType type)
|
||||||
{
|
{
|
||||||
var args = new StreamEventArgs (type);
|
var args = new StreamEventArgs (type);
|
||||||
|
@ -495,7 +497,7 @@ namespace CoreFoundation {
|
||||||
var ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (CFStreamClientContext)));
|
var ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (CFStreamClientContext)));
|
||||||
try {
|
try {
|
||||||
Marshal.StructureToPtr (ctx, ptr, false);
|
Marshal.StructureToPtr (ctx, ptr, false);
|
||||||
if (!DoSetClient (OnCallback, (nint) (long) args, ptr))
|
if (!DoSetClient (OnCallbackDelegate, (nint) (long) args, ptr))
|
||||||
throw new InvalidOperationException ("Stream does not support async events.");
|
throw new InvalidOperationException ("Stream does not support async events.");
|
||||||
} finally {
|
} finally {
|
||||||
Marshal.FreeHGlobal (ptr);
|
Marshal.FreeHGlobal (ptr);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче