* [Tizen.Core] Fix double free issues
The received object in the callback function should not be released.
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
* Prevent double free using an internal property
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
---------
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
Id = id;
Data = data;
IsUsed = false;
+ IsDestroyable = true;
}
internal ChannelObject(IntPtr handle)
{
_handle = handle;
IsUsed = false;
+ IsDestroyable = true;
}
/// <summary>
}
}
+ internal bool IsDestroyable { set; get; }
+
internal bool IsUsed { set; get; }
internal IntPtr Handle { get { return _handle; } }
_dataMap.TryRemove(id, out var data);
}
- Interop.LibTizenCore.TizenCoreChannel.ObjectDestroy(_handle);
+ if (IsDestroyable)
+ {
+ Interop.LibTizenCore.TizenCoreChannel.ObjectDestroy(_handle);
+ }
_handle = IntPtr.Zero;
}
}
using (var eventObject = new EventObject(eventData))
{
EventReceived?.Invoke(this, new EventReceivedEventArgs(eventObject));
+ eventObject.Handle = IntPtr.Zero;
}
return true;
}
{
var eventArgs = new ChannelReceivedEventArgs(channelObject);
receiver.InvokeEventHandler(null, eventArgs);
+ channelObject.IsDestroyable = false;
}
}
}