* ppcnbsd-nat.c: Include <machine/frame.h>, <machine/pcb.h>,
[deliverable/binutils-gdb.git] / gdb / observer.c
index c331112951e66461b9eea1708d573b8fff4bde31..48514b80aaf0195c8ed29103f5921c5ebd6f89a1 100644 (file)
@@ -1,5 +1,6 @@
 /* GDB Notifications to Observers.
-   Copyright 2003 Free Software Foundation, Inc.
+
+   Copyright 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 
 #include "defs.h"
 #include "observer.h"
+#include "command.h"
+#include "gdbcmd.h"
+
+static int observer_debug;
 
 /* The internal generic observer.  */
 
@@ -95,9 +100,9 @@ xfree_observer_list_node (struct observer_list *node)
   xfree (node);
 }
 
-/* Attach the callback NOTIFY to a subject represented by its list
-   of observers LIST.  The DATA is also stored, in order for the subject
-   to provide it back to the observer during a notification.  */
+/* Attach the callback NOTIFY to a SUBJECT.  The DATA is also stored,
+   in order for the subject to provide it back to the observer during
+   a notification.  */
 
 static struct observer *
 generic_observer_attach (struct observer_list **subject,
@@ -114,10 +119,9 @@ generic_observer_attach (struct observer_list **subject,
   return observer_list->observer;
 }
 
-/* Remove the given OBSERVER from the list of observers that need
-   to be notified by the subject represented by its LIST of observers.
-   Once detached, OBSERVER should no longer be used, as it is no longer
-   valid.  */
+/* Remove the given OBSERVER from the SUBJECT.  Once detached, OBSERVER
+   should no longer be used, as it is no longer valid.  */
+
 static void
 generic_observer_detach (struct observer_list **subject,
                         const struct observer *observer)
@@ -145,9 +149,8 @@ generic_observer_detach (struct observer_list **subject,
   warning ("Failed to detach observer");
 }
 
-/* Send a notification to all the observers of a subject represented by
-   its LIST of observers.  ARGS is passed to all observers as an argument
-   to the notification callback.  */
+/* Send a notification to all the observers of SUBJECT.  ARGS is passed to
+   all observers as an argument to the notification callback.  */
 
 static void
 generic_observer_notify (struct observer_list *subject, const void *args)
@@ -161,34 +164,48 @@ generic_observer_notify (struct observer_list *subject, const void *args)
     }
 }
 
-/* normal_stop notifications.  */
 
-static struct observer_list *normal_stop_subject = NULL;
+/* The following code is only used to unit-test the observers from our
+   testsuite.  DO NOT USE IT within observer.c (or anywhere else for
+   that matter)!  */
 
-static void
-observer_normal_stop_notification_stub (const void *data,
-                                       const void *unused_args)
+/* If we define these variables and functions as `static', the
+   compiler will optimize them out.  */
+int observer_test_first_observer = 0;
+int observer_test_second_observer = 0;
+int observer_test_third_observer = 0;
+
+void
+observer_test_first_notification_function (struct bpstats *bs)
 {
-  observer_normal_stop_ftype *notify = (observer_normal_stop_ftype *) data;
-  (*notify) ();
+  observer_test_first_observer++;
 }
 
-struct observer *
-observer_attach_normal_stop (observer_normal_stop_ftype *f)
+void
+observer_test_second_notification_function (struct bpstats *bs)
 {
-  return generic_observer_attach (&normal_stop_subject,
-                                 &observer_normal_stop_notification_stub,
-                                 (void *) f);
+  observer_test_second_observer++;
 }
 
 void
-observer_detach_normal_stop (struct observer *observer)
+observer_test_third_notification_function (struct bpstats *bs)
 {
-  generic_observer_detach (&normal_stop_subject, observer);
+  observer_test_third_observer++;
 }
 
+extern initialize_file_ftype _initialize_observer; /* -Wmissing-prototypes */
+
 void
-observer_notify_normal_stop (void)
+_initialize_observer (void)
 {
-  generic_observer_notify (normal_stop_subject, NULL);
+  add_setshow_zinteger_cmd ("observer", class_maintenance, &observer_debug, "\
+Set observer debugging.", "\
+Show observer debugging.", "\
+When non-zero, observer debugging is enabled.", "\
+Observer debugging is %s.",
+                           NULL, NULL,
+                           &setdebuglist, &showdebuglist);
 }
+
+#include "observer.inc"
This page took 0.025474 seconds and 4 git commands to generate.