Commit a919be3d authored by Bastien Nocera's avatar Bastien Nocera Committed by Allison Karlitskaya

gmain: Warn when g_source_remove() fails

Trying to remove a non-existent source should really be
a programming error, as the programmer could be trying to
use the wrong function to remove a callback, as seen when
GtkScrolledWindow tried to remove ID from another function
using g_source_remove().

See https://bugzilla.gnome.org/show_bug.cgi?id=710666#c12

https://bugzilla.gnome.org/show_bug.cgi?id=710724
parent fe706974
...@@ -2179,29 +2179,34 @@ g_main_context_find_source_by_user_data (GMainContext *context, ...@@ -2179,29 +2179,34 @@ g_main_context_find_source_by_user_data (GMainContext *context,
/** /**
* g_source_remove: * g_source_remove:
* @tag: the ID of the source to remove. * @tag: the ID of the source to remove.
* *
* Removes the source with the given id from the default main context. * Removes the source with the given id from the default main context.
* The id of *
* a #GSource is given by g_source_get_id(), or will be returned by the * The id of a #GSource is given by g_source_get_id(), or will be
* functions g_source_attach(), g_idle_add(), g_idle_add_full(), * returned by the functions g_source_attach(), g_idle_add(),
* g_timeout_add(), g_timeout_add_full(), g_child_watch_add(), * g_idle_add_full(), g_timeout_add(), g_timeout_add_full(),
* g_child_watch_add_full(), g_io_add_watch(), and g_io_add_watch_full(). * g_child_watch_add(), g_child_watch_add_full(), g_io_add_watch(), and
* g_io_add_watch_full().
* *
* See also g_source_destroy(). You must use g_source_destroy() for sources * See also g_source_destroy(). You must use g_source_destroy() for sources
* added to a non-default main context. * added to a non-default main context.
* *
* Return value: %TRUE if the source was found and removed. * It is a programmer error to attempt to remove a non-existent source.
*
* Return value: For historical reasons, this function always returns %TRUE
**/ **/
gboolean gboolean
g_source_remove (guint tag) g_source_remove (guint tag)
{ {
GSource *source; GSource *source;
g_return_val_if_fail (tag > 0, FALSE); g_return_val_if_fail (tag > 0, FALSE);
source = g_main_context_find_source_by_id (NULL, tag); source = g_main_context_find_source_by_id (NULL, tag);
if (source) if (source)
g_source_destroy (source); g_source_destroy (source);
else
g_critical ("Source ID %u was not found when attempting to remove it", tag);
return source != NULL; return source != NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment