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

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

Change 26693 by jhb@jhb_laptop on 2003/03/11 09:58:03

	- Move the functionality of clearing the eventhandler list off
	  into its own function.
	- Remove the post semaphore event, it's really not all that useful.
	  Instead, replace it with an event to dump the current list and
	  add an event to blow away the current list.

Affected files ...

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

Differences ...

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

@@ -52,7 +52,7 @@
 #include <sys/sysctl.h>
 #include <sys/systm.h>
 
-#define	MAX_EVENT	9
+#define	MAX_EVENT	10
 #define	NUM_THREADS	2
 
 #define	EVENT_TYPE_BROADCAST	0x1
@@ -76,7 +76,8 @@
 	{ "help" },
 	{ "invoke handlers on both threads", EVENT_TYPE_BROADCAST },
 	{ "hello world", EVENT_TYPE_BROADCAST },
-	{ "post to semaphore" },
+	{ "dump list" },
+	{ "clear list" },
 	{ "add print foo handler" },
 	{ "add wait handler" },
 	{ "add post handler" },
@@ -244,6 +245,21 @@
 }
 
 static void
+evtest_clearlist(void)
+{
+	struct eventhandler_entry *ee;
+
+	ee = (struct eventhandler_entry *)first_tag;
+	if (ee != NULL) {
+		while (TAILQ_PREV(ee, eventhandler_entry_head, ee_link) != NULL)
+			ee = TAILQ_PREV(ee, eventhandler_entry_head, ee_link);
+		for (; ee != NULL; ee = TAILQ_NEXT(ee, ee_link))
+			EVENTHANDLER_DEREGISTER(evtest, ee);
+		first_tag = NULL;
+	}
+}
+
+static void
 event_thread(void *arg)
 {
 	int ev;
@@ -305,25 +321,28 @@
 					    events[ev].ei_help);
 			break;
 		case 4:
-			sema_post(&evtest_sema);
+			evtest_dumplist(NULL);
 			break;
 		case 5:
+			evtest_clearlist();
+			break;
+		case 6:
 			foo_tag = first_tag = EVENTHANDLER_REGISTER(evtest,
 			    evtest_print, "foo", 5);
 			break;
-		case 6:
+		case 7:
 			first_tag = EVENTHANDLER_REGISTER(evtest, evtest_wait,
 			    NULL, 5);
 			break;
-		case 7:
+		case 8:
 			first_tag = EVENTHANDLER_REGISTER(evtest, evtest_post,
 			    NULL, 5);
 			break;
-		case 8:
+		case 9:
 			first_tag = EVENTHANDLER_REGISTER(evtest,
 			    evtest_dumplist, NULL, 5);
 			break;
-		case 9:
+		case 10:
 			first_tag = EVENTHANDLER_REGISTER(evtest,
 			    evtest_removefoo, NULL, 5);
 		default:
@@ -378,17 +397,9 @@
 static void
 cleanup(void)
 {
-	struct eventhandler_entry *ee;
 	int i;
 
-	ee = (struct eventhandler_entry *)first_tag;
-	if (ee != NULL) {
-		while (TAILQ_PREV(ee, eventhandler_entry_head, ee_link) != NULL)
-			ee = TAILQ_PREV(ee, eventhandler_entry_head, ee_link);
-		for (; ee != NULL; ee = TAILQ_NEXT(ee, ee_link))
-			EVENTHANDLER_DEREGISTER(evtest, ee);
-	}
-
+	evtest_clearlist();
 	mtx_lock(&event_mtx);
 	for (i = 0; i < NUM_THREADS; i++)
 		thread_destroy(i);

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?200303111758.h2BHwkE2062025>