From 958f33656a4211b747622f5e62d8fd7e7adf7cf9 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Mon, 30 Nov 1998 07:08:54 +0000 Subject: [PATCH] added g_hook_list_marshal_check() to eventually destroy hooks after they Mon Nov 30 07:12:10 1998 Tim Janik * glib.h: * ghook.c: added g_hook_list_marshal_check() to eventually destroy hooks after they got marshalled. --- ChangeLog | 6 ++++++ ChangeLog.pre-2-0 | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-12 | 6 ++++++ ChangeLog.pre-2-2 | 6 ++++++ ChangeLog.pre-2-4 | 6 ++++++ ChangeLog.pre-2-6 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ ghook.c | 36 ++++++++++++++++++++++++++++++++++++ glib.h | 6 ++++++ glib/ghook.c | 36 ++++++++++++++++++++++++++++++++++++ glib/glib.h | 6 ++++++ 12 files changed, 132 insertions(+) diff --git a/ChangeLog b/ChangeLog index b4279e6..e80c15f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index b4279e6..e80c15f 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Mon Nov 30 07:12:10 1998 Tim Janik + + * glib.h: + * ghook.c: added g_hook_list_marshal_check() to eventually destroy + hooks after they got marshalled. + Sun Nov 29 17:31:43 EST 1998 Jeff Garzik * configure.in, Makefile.am, gmodule/Makefile.am: diff --git a/ghook.c b/ghook.c index 2e231ea..47a2874 100644 --- a/ghook.c +++ b/ghook.c @@ -324,6 +324,42 @@ g_hook_list_invoke_check (GHookList *hook_list, } void +g_hook_list_marshal_check (GHookList *hook_list, + gboolean may_recurse, + GHookCheckMarshaller marshaller, + gpointer data) +{ + GHook *hook; + + g_return_if_fail (hook_list != NULL); + g_return_if_fail (hook_list->is_setup); + g_return_if_fail (marshaller != NULL); + + hook = g_hook_first_valid (hook_list, may_recurse); + while (hook) + { + GHook *tmp; + gboolean was_in_call; + gboolean need_destroy; + + g_hook_ref (hook_list, hook); + + was_in_call = G_HOOK_IN_CALL (hook); + hook->flags |= G_HOOK_FLAG_IN_CALL; + need_destroy = !marshaller (hook, data); + if (!was_in_call) + hook->flags &= ~G_HOOK_FLAG_IN_CALL; + if (need_destroy) + g_hook_destroy_link (hook_list, hook); + + tmp = g_hook_next_valid (hook, may_recurse); + + g_hook_unref (hook_list, hook); + hook = tmp; + } +} + +void g_hook_list_marshal (GHookList *hook_list, gboolean may_recurse, GHookMarshaller marshaller, diff --git a/glib.h b/glib.h index 39c73f8..353051e 100644 --- a/glib.h +++ b/glib.h @@ -765,6 +765,8 @@ typedef gboolean (*GHookFindFunc) (GHook *hook, gpointer data); typedef void (*GHookMarshaller) (GHook *hook, gpointer data); +typedef gboolean (*GHookCheckMarshaller) (GHook *hook, + gpointer data); typedef void (*GHookFunc) (gpointer data); typedef gboolean (*GHookCheckFunc) (gpointer data); typedef void (*GHookFreeFunc) (GHookList *hook_list, @@ -1215,6 +1217,10 @@ void g_hook_list_marshal (GHookList *hook_list, gboolean may_recurse, GHookMarshaller marshaller, gpointer data); +void g_hook_list_marshal_check (GHookList *hook_list, + gboolean may_recurse, + GHookCheckMarshaller marshaller, + gpointer data); /* Fatal error handlers. diff --git a/glib/ghook.c b/glib/ghook.c index 2e231ea..47a2874 100644 --- a/glib/ghook.c +++ b/glib/ghook.c @@ -324,6 +324,42 @@ g_hook_list_invoke_check (GHookList *hook_list, } void +g_hook_list_marshal_check (GHookList *hook_list, + gboolean may_recurse, + GHookCheckMarshaller marshaller, + gpointer data) +{ + GHook *hook; + + g_return_if_fail (hook_list != NULL); + g_return_if_fail (hook_list->is_setup); + g_return_if_fail (marshaller != NULL); + + hook = g_hook_first_valid (hook_list, may_recurse); + while (hook) + { + GHook *tmp; + gboolean was_in_call; + gboolean need_destroy; + + g_hook_ref (hook_list, hook); + + was_in_call = G_HOOK_IN_CALL (hook); + hook->flags |= G_HOOK_FLAG_IN_CALL; + need_destroy = !marshaller (hook, data); + if (!was_in_call) + hook->flags &= ~G_HOOK_FLAG_IN_CALL; + if (need_destroy) + g_hook_destroy_link (hook_list, hook); + + tmp = g_hook_next_valid (hook, may_recurse); + + g_hook_unref (hook_list, hook); + hook = tmp; + } +} + +void g_hook_list_marshal (GHookList *hook_list, gboolean may_recurse, GHookMarshaller marshaller, diff --git a/glib/glib.h b/glib/glib.h index 39c73f8..353051e 100644 --- a/glib/glib.h +++ b/glib/glib.h @@ -765,6 +765,8 @@ typedef gboolean (*GHookFindFunc) (GHook *hook, gpointer data); typedef void (*GHookMarshaller) (GHook *hook, gpointer data); +typedef gboolean (*GHookCheckMarshaller) (GHook *hook, + gpointer data); typedef void (*GHookFunc) (gpointer data); typedef gboolean (*GHookCheckFunc) (gpointer data); typedef void (*GHookFreeFunc) (GHookList *hook_list, @@ -1215,6 +1217,10 @@ void g_hook_list_marshal (GHookList *hook_list, gboolean may_recurse, GHookMarshaller marshaller, gpointer data); +void g_hook_list_marshal_check (GHookList *hook_list, + gboolean may_recurse, + GHookCheckMarshaller marshaller, + gpointer data); /* Fatal error handlers. -- 2.7.4