gboolean g_source_remove_by_source_data (gpointer source_data) { GHook *hook; G_LOCK (main_loop); hook = g_hook_find (&source_list, TRUE, g_source_find_source_data, source_data); if (hook) g_hook_destroy_link (&source_list, hook); G_UNLOCK (main_loop); return hook != NULL; }
gboolean g_source_remove_by_funcs_user_data (GSourceFuncs *funcs, gpointer user_data) { gpointer d[2]; GHook *hook; g_return_val_if_fail (funcs != NULL, FALSE); G_LOCK (main_loop); d[0] = funcs; d[1] = user_data; hook = g_hook_find (&source_list, TRUE, g_source_find_funcs_user_data, d); if (hook) g_hook_destroy_link (&source_list, hook); G_UNLOCK (main_loop); return hook != NULL; }
void gnc_hook_remove_dangler (const gchar *name, GFunc callback) { GncHook *gnc_hook; GHook *hook; ENTER("name %s, function %p", name, callback); gnc_hook = gnc_hook_lookup(name); if (gnc_hook == NULL) { LEAVE("Unknown hook list %s", name); return; } hook = g_hook_find(gnc_hook->c_danglers, TRUE, hook_remove_runner, callback); if (hook == NULL) { LEAVE("Hook %p not found in %s", callback, name); return; } g_hook_destroy_link(gnc_hook->c_danglers, hook); LEAVE("Removed %p from %s", hook, name); }