From 40a5257083a34a8c76d1d5f045e3f61713fbcd5a Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Thu, 25 Jun 2020 12:50:29 +0200 Subject: [PATCH 1/2] Opaque: allow immediate run of finalize handler Introduces global flag Opaque.ForceFinalizeInMainThread. When set to false, objects inheriting Glib.Opaque will not schedule to conclude their finalization from withing GLib main loop in the main thread, but will do it immediately. This can be useful in programs that don't deal with GTK widgets, which are expected to be freed from application's UI thread. For backward compatibility ForceFinalizeInMainThread defaults to true. --- Source/generator/OpaqueGen.cs | 6 +++++- Source/glib/Opaque.cs | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/generator/OpaqueGen.cs b/Source/generator/OpaqueGen.cs index c0e252620..6088323f0 100644 --- a/Source/generator/OpaqueGen.cs +++ b/Source/generator/OpaqueGen.cs @@ -167,7 +167,11 @@ public override void Generate (GenerationInfo gen_info) sw.WriteLine ("\t\t\tif (!Owned)"); sw.WriteLine ("\t\t\t\treturn;"); sw.WriteLine ("\t\t\tFinalizerInfo info = new FinalizerInfo (Handle);"); - sw.WriteLine ("\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));"); + sw.WriteLine ("\t\t\tif (ForceFinalizeInMainThread) {"); + sw.WriteLine ("\t\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));"); + sw.WriteLine ("\t\t\t} else {"); + sw.WriteLine ("\t\t\t\tinfo.Handler();"); + sw.WriteLine ("\t\t\t}"); sw.WriteLine ("\t\t}"); sw.WriteLine (); } diff --git a/Source/glib/Opaque.cs b/Source/glib/Opaque.cs index 955285f6a..2b38859bd 100644 --- a/Source/glib/Opaque.cs +++ b/Source/glib/Opaque.cs @@ -30,6 +30,8 @@ namespace GLib { public class Opaque : IWrapper, IDisposable { + public static bool ForceFinalizeInMainThread = true; + IntPtr _obj; bool owned; From cb132c393383e76bd07b1c06df21b7c4562892f5 Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Thu, 25 Jun 2020 13:15:57 +0200 Subject: [PATCH 2/2] Regenerate sources to add ForceFinalizeInMainThread --- Source/atk/generated/Atk_Range.cs | 6 +++++- Source/gdk/generated/Gdk_FrameTimings.cs | 6 +++++- Source/gdk/generated/Gdk_PixbufFormat.cs | 6 +++++- Source/gio/generated/GLib_FileAttributeInfoList.cs | 6 +++++- Source/gio/generated/GLib_FileAttributeMatcher.cs | 6 +++++- Source/gio/generated/GLib_IOModuleScope.cs | 6 +++++- Source/gio/generated/GLib_Resource.cs | 6 +++++- Source/gio/generated/GLib_SrvTarget.cs | 6 +++++- Source/gtk/generated/Gtk_CssSection.cs | 6 +++++- Source/gtk/generated/Gtk_Gradient.cs | 6 +++++- Source/gtk/generated/Gtk_IconSet.cs | 6 +++++- Source/gtk/generated/Gtk_IconSource.cs | 6 +++++- Source/gtk/generated/Gtk_KineticScrolling.cs | 6 +++++- Source/gtk/generated/Gtk_MenuTracker.cs | 6 +++++- Source/gtk/generated/Gtk_PaperSize.cs | 6 +++++- Source/gtk/generated/Gtk_RecentInfo.cs | 6 +++++- Source/gtk/generated/Gtk_SelectionData.cs | 6 +++++- Source/gtk/generated/Gtk_SymbolicColor.cs | 6 +++++- Source/gtk/generated/Gtk_TargetList.cs | 6 +++++- Source/gtk/generated/Gtk_TextAttributes.cs | 6 +++++- Source/gtk/generated/Gtk_TreePath.cs | 6 +++++- Source/gtk/generated/Gtk_TreeRowReference.cs | 6 +++++- Source/gtk/generated/Gtk_WidgetPath.cs | 6 +++++- Source/pango/generated/Pango_AttrIterator.cs | 6 +++++- Source/pango/generated/Pango_AttrList.cs | 6 +++++- Source/pango/generated/Pango_Coverage.cs | 6 +++++- Source/pango/generated/Pango_FontDescription.cs | 6 +++++- Source/pango/generated/Pango_FontMetrics.cs | 6 +++++- Source/pango/generated/Pango_GlyphString.cs | 6 +++++- Source/pango/generated/Pango_Item.cs | 6 +++++- Source/pango/generated/Pango_LayoutIter.cs | 6 +++++- Source/pango/generated/Pango_LayoutLine.cs | 6 +++++- Source/pango/generated/Pango_TabArray.cs | 6 +++++- 33 files changed, 165 insertions(+), 33 deletions(-) diff --git a/Source/atk/generated/Atk_Range.cs b/Source/atk/generated/Atk_Range.cs index 374243bd8..34b141c1b 100644 --- a/Source/atk/generated/Atk_Range.cs +++ b/Source/atk/generated/Atk_Range.cs @@ -104,7 +104,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gdk/generated/Gdk_FrameTimings.cs b/Source/gdk/generated/Gdk_FrameTimings.cs index e8200758e..5256903a5 100644 --- a/Source/gdk/generated/Gdk_FrameTimings.cs +++ b/Source/gdk/generated/Gdk_FrameTimings.cs @@ -132,7 +132,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gdk/generated/Gdk_PixbufFormat.cs b/Source/gdk/generated/Gdk_PixbufFormat.cs index 12bce512a..7adfd0a11 100644 --- a/Source/gdk/generated/Gdk_PixbufFormat.cs +++ b/Source/gdk/generated/Gdk_PixbufFormat.cs @@ -166,7 +166,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gio/generated/GLib_FileAttributeInfoList.cs b/Source/gio/generated/GLib_FileAttributeInfoList.cs index 8d25eb62e..6fa05de23 100644 --- a/Source/gio/generated/GLib_FileAttributeInfoList.cs +++ b/Source/gio/generated/GLib_FileAttributeInfoList.cs @@ -103,7 +103,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gio/generated/GLib_FileAttributeMatcher.cs b/Source/gio/generated/GLib_FileAttributeMatcher.cs index c5266d704..447d1f2dc 100644 --- a/Source/gio/generated/GLib_FileAttributeMatcher.cs +++ b/Source/gio/generated/GLib_FileAttributeMatcher.cs @@ -136,7 +136,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gio/generated/GLib_IOModuleScope.cs b/Source/gio/generated/GLib_IOModuleScope.cs index 78b8b7084..dc4c82fe5 100644 --- a/Source/gio/generated/GLib_IOModuleScope.cs +++ b/Source/gio/generated/GLib_IOModuleScope.cs @@ -58,7 +58,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gio/generated/GLib_Resource.cs b/Source/gio/generated/GLib_Resource.cs index 9ba4db09a..c198b206d 100644 --- a/Source/gio/generated/GLib_Resource.cs +++ b/Source/gio/generated/GLib_Resource.cs @@ -152,7 +152,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gio/generated/GLib_SrvTarget.cs b/Source/gio/generated/GLib_SrvTarget.cs index 1707fd154..dd38bb907 100644 --- a/Source/gio/generated/GLib_SrvTarget.cs +++ b/Source/gio/generated/GLib_SrvTarget.cs @@ -124,7 +124,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_CssSection.cs b/Source/gtk/generated/Gtk_CssSection.cs index 5b9f55263..152011278 100644 --- a/Source/gtk/generated/Gtk_CssSection.cs +++ b/Source/gtk/generated/Gtk_CssSection.cs @@ -143,7 +143,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_Gradient.cs b/Source/gtk/generated/Gtk_Gradient.cs index 6f0ccae0f..cb6f63310 100644 --- a/Source/gtk/generated/Gtk_Gradient.cs +++ b/Source/gtk/generated/Gtk_Gradient.cs @@ -99,7 +99,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_IconSet.cs b/Source/gtk/generated/Gtk_IconSet.cs index bcc7d8358..9ce2ee1cf 100644 --- a/Source/gtk/generated/Gtk_IconSet.cs +++ b/Source/gtk/generated/Gtk_IconSet.cs @@ -139,7 +139,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_IconSource.cs b/Source/gtk/generated/Gtk_IconSource.cs index 4b4c63629..0abcb5cd9 100644 --- a/Source/gtk/generated/Gtk_IconSource.cs +++ b/Source/gtk/generated/Gtk_IconSource.cs @@ -240,7 +240,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_KineticScrolling.cs b/Source/gtk/generated/Gtk_KineticScrolling.cs index ad5c7003c..a1db3ef0a 100644 --- a/Source/gtk/generated/Gtk_KineticScrolling.cs +++ b/Source/gtk/generated/Gtk_KineticScrolling.cs @@ -58,7 +58,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_MenuTracker.cs b/Source/gtk/generated/Gtk_MenuTracker.cs index 4ec778e71..fc13a5afc 100644 --- a/Source/gtk/generated/Gtk_MenuTracker.cs +++ b/Source/gtk/generated/Gtk_MenuTracker.cs @@ -65,7 +65,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_PaperSize.cs b/Source/gtk/generated/Gtk_PaperSize.cs index e398637cd..d64273dc9 100644 --- a/Source/gtk/generated/Gtk_PaperSize.cs +++ b/Source/gtk/generated/Gtk_PaperSize.cs @@ -288,7 +288,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_RecentInfo.cs b/Source/gtk/generated/Gtk_RecentInfo.cs index d62fc06de..c2beeb373 100644 --- a/Source/gtk/generated/Gtk_RecentInfo.cs +++ b/Source/gtk/generated/Gtk_RecentInfo.cs @@ -317,7 +317,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_SelectionData.cs b/Source/gtk/generated/Gtk_SelectionData.cs index 6fa816a33..60b531aa4 100644 --- a/Source/gtk/generated/Gtk_SelectionData.cs +++ b/Source/gtk/generated/Gtk_SelectionData.cs @@ -222,7 +222,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_SymbolicColor.cs b/Source/gtk/generated/Gtk_SymbolicColor.cs index 1ae848159..7bca13327 100644 --- a/Source/gtk/generated/Gtk_SymbolicColor.cs +++ b/Source/gtk/generated/Gtk_SymbolicColor.cs @@ -138,7 +138,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_TargetList.cs b/Source/gtk/generated/Gtk_TargetList.cs index bd29701c9..4d520b244 100644 --- a/Source/gtk/generated/Gtk_TargetList.cs +++ b/Source/gtk/generated/Gtk_TargetList.cs @@ -124,7 +124,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_TextAttributes.cs b/Source/gtk/generated/Gtk_TextAttributes.cs index 84cb67c2c..60689f9bb 100644 --- a/Source/gtk/generated/Gtk_TextAttributes.cs +++ b/Source/gtk/generated/Gtk_TextAttributes.cs @@ -375,7 +375,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_TreePath.cs b/Source/gtk/generated/Gtk_TreePath.cs index 9126ba2e1..80d42c7ed 100644 --- a/Source/gtk/generated/Gtk_TreePath.cs +++ b/Source/gtk/generated/Gtk_TreePath.cs @@ -201,7 +201,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_TreeRowReference.cs b/Source/gtk/generated/Gtk_TreeRowReference.cs index 89f5219bf..ee880de08 100644 --- a/Source/gtk/generated/Gtk_TreeRowReference.cs +++ b/Source/gtk/generated/Gtk_TreeRowReference.cs @@ -136,7 +136,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/gtk/generated/Gtk_WidgetPath.cs b/Source/gtk/generated/Gtk_WidgetPath.cs index f9bf09c46..3a4ac1dfb 100644 --- a/Source/gtk/generated/Gtk_WidgetPath.cs +++ b/Source/gtk/generated/Gtk_WidgetPath.cs @@ -396,7 +396,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_AttrIterator.cs b/Source/pango/generated/Pango_AttrIterator.cs index 0f6c05154..15d9de07d 100644 --- a/Source/pango/generated/Pango_AttrIterator.cs +++ b/Source/pango/generated/Pango_AttrIterator.cs @@ -69,7 +69,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_AttrList.cs b/Source/pango/generated/Pango_AttrList.cs index 6b3662d39..68a8ad543 100644 --- a/Source/pango/generated/Pango_AttrList.cs +++ b/Source/pango/generated/Pango_AttrList.cs @@ -107,7 +107,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_Coverage.cs b/Source/pango/generated/Pango_Coverage.cs index 23de4fc7a..16f9c09b7 100644 --- a/Source/pango/generated/Pango_Coverage.cs +++ b/Source/pango/generated/Pango_Coverage.cs @@ -110,7 +110,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_FontDescription.cs b/Source/pango/generated/Pango_FontDescription.cs index 775473832..10fbdddb0 100644 --- a/Source/pango/generated/Pango_FontDescription.cs +++ b/Source/pango/generated/Pango_FontDescription.cs @@ -323,7 +323,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_FontMetrics.cs b/Source/pango/generated/Pango_FontMetrics.cs index afee711f0..1ea6e22ac 100644 --- a/Source/pango/generated/Pango_FontMetrics.cs +++ b/Source/pango/generated/Pango_FontMetrics.cs @@ -160,7 +160,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_GlyphString.cs b/Source/pango/generated/Pango_GlyphString.cs index ff8a35993..9a6159d41 100644 --- a/Source/pango/generated/Pango_GlyphString.cs +++ b/Source/pango/generated/Pango_GlyphString.cs @@ -157,7 +157,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_Item.cs b/Source/pango/generated/Pango_Item.cs index 9a910c6d3..5345fa6f9 100644 --- a/Source/pango/generated/Pango_Item.cs +++ b/Source/pango/generated/Pango_Item.cs @@ -138,7 +138,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_LayoutIter.cs b/Source/pango/generated/Pango_LayoutIter.cs index 7c21c04ab..98cec5bef 100644 --- a/Source/pango/generated/Pango_LayoutIter.cs +++ b/Source/pango/generated/Pango_LayoutIter.cs @@ -259,7 +259,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_LayoutLine.cs b/Source/pango/generated/Pango_LayoutLine.cs index 06853317a..da6b233e8 100644 --- a/Source/pango/generated/Pango_LayoutLine.cs +++ b/Source/pango/generated/Pango_LayoutLine.cs @@ -161,7 +161,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } } diff --git a/Source/pango/generated/Pango_TabArray.cs b/Source/pango/generated/Pango_TabArray.cs index 584c578ef..b674667fd 100644 --- a/Source/pango/generated/Pango_TabArray.cs +++ b/Source/pango/generated/Pango_TabArray.cs @@ -117,7 +117,11 @@ public bool Handler () if (!Owned) return; FinalizerInfo info = new FinalizerInfo (Handle); - GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + if (ForceFinalizeInMainThread) { + GLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler)); + } else { + info.Handler(); + } }