diff --git a/Source/Libs/GLibSharp/Idle.cs b/Source/Libs/GLibSharp/Idle.cs index 773b983ed..9dda13518 100644 --- a/Source/Libs/GLibSharp/Idle.cs +++ b/Source/Libs/GLibSharp/Idle.cs @@ -78,7 +78,9 @@ namespace GLib { IdleProxy p = new IdleProxy (hndlr); lock (p) { - p.ID = g_idle_add ((IdleHandlerInternal) p.proxy_handler, IntPtr.Zero); + var gch = GCHandle.Alloc(p); + var userData = GCHandle.ToIntPtr(gch); + p.ID = g_idle_add_full (0, (IdleHandlerInternal) p.proxy_handler, userData, DestroyHelper.NotifyHandler); Source.AddSourceHandler (p.ID, p); } diff --git a/Source/Libs/GLibSharp/Timeout.cs b/Source/Libs/GLibSharp/Timeout.cs index cdb988d6d..2b48d66e1 100644 --- a/Source/Libs/GLibSharp/Timeout.cs +++ b/Source/Libs/GLibSharp/Timeout.cs @@ -73,7 +73,9 @@ namespace GLib { TimeoutProxy p = new TimeoutProxy (hndlr); lock (p) { - p.ID = g_timeout_add (interval, (TimeoutHandlerInternal) p.proxy_handler, IntPtr.Zero); + var gch = GCHandle.Alloc(p); + var userData = GCHandle.ToIntPtr(gch); + p.ID = g_timeout_add_full (0, interval, (TimeoutHandlerInternal) p.proxy_handler, userData, DestroyHelper.NotifyHandler); Source.AddSourceHandler (p.ID, p); }