Bug 407077 - (SWT:2591): GLib-GObject-WARNING **: gclosure.c:697: unable to remove uninstalled invalidation notifier
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c index e7bb60d..2231032 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c
@@ -2577,6 +2577,16 @@ } #endif +#ifndef NO__1g_1closure_1sink +JNIEXPORT void JNICALL OS_NATIVE(_1g_1closure_1sink) + (JNIEnv *env, jclass that, jintLong arg0) +{ + OS_NATIVE_ENTER(env, that, _1g_1closure_1sink_FUNC); + g_closure_sink((GClosure *)arg0); + OS_NATIVE_EXIT(env, that, _1g_1closure_1sink_FUNC); +} +#endif + #ifndef NO__1g_1closure_1unref JNIEXPORT void JNICALL OS_NATIVE(_1g_1closure_1unref) (JNIEnv *env, jclass that, jintLong arg0)
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c index b6f21a5..576b8eb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c
@@ -229,6 +229,7 @@ "_1g_1app_1info_1supports_1uris", "_1g_1cclosure_1new", "_1g_1closure_1ref", + "_1g_1closure_1sink", "_1g_1closure_1unref", "_1g_1content_1type_1equals", "_1g_1content_1type_1is_1a",
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h index c503d9c..b42f0f7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h
@@ -239,6 +239,7 @@ _1g_1app_1info_1supports_1uris_FUNC, _1g_1cclosure_1new_FUNC, _1g_1closure_1ref_FUNC, + _1g_1closure_1sink_FUNC, _1g_1closure_1unref_FUNC, _1g_1content_1type_1equals_FUNC, _1g_1content_1type_1is_1a_FUNC,
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java index 59c2960..aad5a38 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
@@ -2211,6 +2211,16 @@ } } /** @param closure cast=(GClosure *) */ +public static final native void _g_closure_sink(long /*int*/ closure); +public static final void g_closure_sink(long /*int*/ closure) { + lock.lock(); + try { + _g_closure_sink(closure); + } finally { + lock.unlock(); + } +} +/** @param closure cast=(GClosure *) */ public static final native void _g_closure_unref(long /*int*/ closure); public static final void g_closure_unref(long /*int*/ closure) { lock.lock();
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java index 99ce322..9bc01db 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
@@ -1465,9 +1465,11 @@ } long /*int*/ getClosure (int id) { - if (OS.GLIB_VERSION >= OS.VERSION(2, 36, 0) && closuresCount [id]++ > 255) { + if (OS.GLIB_VERSION >= OS.VERSION(2, 36, 0) && ++closuresCount [id] >= 255) { if (closures [id] != 0) OS.g_closure_unref (closures [id]); closures [id] = OS.g_cclosure_new (closuresProc [id], id, 0); + OS.g_closure_ref (closures [id]); + OS.g_closure_sink (closures [id]); closuresCount [id] = 0; } return closures [id]; @@ -2719,7 +2721,10 @@ if (closuresProc[i] != 0) { closures [i] = OS.g_cclosure_new(closuresProc [i], i, 0); } - if (closures [i] != 0) OS.g_closure_ref (closures [i]); + if (closures [i] != 0) { + OS.g_closure_ref (closures [i]); + OS.g_closure_sink (closures [i]); + } } timerCallback = new Callback (this, "timerProc", 1); //$NON-NLS-1$