From 1d865de87843c3ca5c0d2c6277e26ffee1dc9d65 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 May 2017 14:17:38 +0200 Subject: [PATCH] Fix iOS crash with null GCHandles --- wrappers/csharp/wrapper_impl.mustache | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/wrappers/csharp/wrapper_impl.mustache b/wrappers/csharp/wrapper_impl.mustache index 7e188b8f8..b3bf26591 100644 --- a/wrappers/csharp/wrapper_impl.mustache +++ b/wrappers/csharp/wrapper_impl.mustache @@ -122,9 +122,9 @@ namespace Linphone ~LinphoneObject() { - //Console.WriteLine("Destroying" + this.ToString()); + //Console.WriteLine("Destroying " + this.ToString()); if (nativePtr != IntPtr.Zero) { - //Console.WriteLine("Unreffing" + this.ToString()); + //Console.WriteLine("Unreffing " + this.ToString()); belle_sip_object_unref(nativePtr); } } @@ -136,14 +136,14 @@ namespace Linphone if (objPtr == IntPtr.Zero) { T obj = new T(); - //Console.WriteLine("Creating" + obj.ToString()); + //Console.WriteLine("Creating " + obj.ToString()); if (takeRef) { ptr = belle_sip_object_ref(ptr); - //Console.WriteLine("Reffing" + obj.ToString()); + //Console.WriteLine("Reffing " + obj.ToString()); } obj.nativePtr = ptr; - GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Weak); + GCHandle handle = GCHandle.Alloc(obj, GCHandleType.WeakTrackResurrection); objPtr = GCHandle.ToIntPtr(handle); belle_sip_object_data_set(ptr, "cs_obj", objPtr, onDataDestroyed); return obj; @@ -152,11 +152,7 @@ namespace Linphone { GCHandle handle = GCHandle.FromIntPtr(objPtr); T obj = (T)handle.Target; - if (takeRef) - { - obj.nativePtr = belle_sip_object_ref(obj.nativePtr); - //Console.WriteLine("Reffing" + obj.ToString()); - } + //Console.WriteLine("Using existing " + obj.ToString()); return obj; } }