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>