Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Mar 2003 09:48:32 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 26691 for review
Message-ID:  <200303111748.h2BHmWOT061189@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=26691

Change 26691 by jhb@jhb_laptop on 2003/03/11 09:47:37

	Allow for an event to remove the print "foo" handler to be
	added to the list.

Affected files ...

.. //depot/projects/smpng/sys/modules/evtest/evtest.c#14 edit

Differences ...

==== //depot/projects/smpng/sys/modules/evtest/evtest.c#14 (text+ko) ====

@@ -52,12 +52,12 @@
 #include <sys/sysctl.h>
 #include <sys/systm.h>
 
-#define	MAX_EVENT	8
+#define	MAX_EVENT	9
 #define	NUM_THREADS	2
 
 #define	EVENT_TYPE_BROADCAST	0x1
 
-static eventhandler_tag first_tag;
+static eventhandler_tag first_tag, foo_tag;
 static struct cv event_cv, broadcast_cv, event_recvd;
 static struct mtx event_mtx;
 static struct sema evtest_sema;
@@ -80,7 +80,8 @@
 	{ "add print foo handler" },
 	{ "add wait handler" },
 	{ "add post handler" },
-	{ "add dump handler" }
+	{ "add dump handler" },
+	{ "add removefoo handler" },
 };
 
 static int	mod_event(struct module *module, int cmd, void *arg);
@@ -94,7 +95,8 @@
 typedef void (evtest_fn)(void *);
 EVENTHANDLER_DECLARE(evtest, evtest_fn *);
 
-static evtest_fn evtest_print, evtest_wait, evtest_post, evtest_dumplist;
+static evtest_fn evtest_print, evtest_wait, evtest_post, evtest_dumplist,
+    evtest_removefoo;
 
 struct evtest_fninfo {
 	evtest_fn *ev_fn;
@@ -106,6 +108,7 @@
 	{ &evtest_wait, "evtest_wait" },
 	{ &evtest_post, "evtest_post" },
 	{ &evtest_dumplist, "evtest_dumplist" },
+	{ &evtest_removefoo, "evtest_removefoo" },
 	{ NULL, NULL }
 };
 	
@@ -205,6 +208,18 @@
 	sema_post(&evtest_sema);
 }
 
+static void
+evtest_removefoo(void *arg)
+{
+
+	mtx_lock(&event_mtx);
+	if (foo_tag != NULL) {
+		EVENTHANDLER_DEREGISTER(evtest, foo_tag);
+		foo_tag = NULL;
+	}
+	mtx_unlock(&event_mtx);
+}
+
 /*
  * Yes, this is really gross and greatly violates the eventhandler
  * abstraction.  Deal.
@@ -293,7 +308,7 @@
 			sema_post(&evtest_sema);
 			break;
 		case 5:
-			first_tag = EVENTHANDLER_REGISTER(evtest,
+			foo_tag = first_tag = EVENTHANDLER_REGISTER(evtest,
 			    evtest_print, "foo", 5);
 			break;
 		case 6:
@@ -308,6 +323,9 @@
 			first_tag = EVENTHANDLER_REGISTER(evtest,
 			    evtest_dumplist, NULL, 5);
 			break;
+		case 9:
+			first_tag = EVENTHANDLER_REGISTER(evtest,
+			    evtest_removefoo, NULL, 5);
 		default:
 			panic("event %d is bogus\n", event);
 		}

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303111748.h2BHmWOT061189>