From owner-p4-projects Tue Mar 11 10:39:43 2003 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9D37637B405; Tue, 11 Mar 2003 10:39:39 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4B70637B404 for ; Tue, 11 Mar 2003 10:39:39 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id CB98843FAF for ; Tue, 11 Mar 2003 10:39:38 -0800 (PST) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h2BIdc0U064869 for ; Tue, 11 Mar 2003 10:39:38 -0800 (PST) (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h2BIdc7t064866 for perforce@freebsd.org; Tue, 11 Mar 2003 10:39:38 -0800 (PST) Date: Tue, 11 Mar 2003 10:39:38 -0800 (PST) Message-Id: <200303111839.h2BIdc7t064866@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin Subject: PERFORCE change 26697 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://perforce.freebsd.org/chv.cgi?CH=26697 Change 26697 by jhb@jhb_laptop on 2003/03/11 10:39:34 Add a synchronization event to force the threads to both be executing the eventhandler at the same time to force the race that we are testing. Affected files ... .. //depot/projects/smpng/sys/modules/evtest/evtest.c#19 edit Differences ... ==== //depot/projects/smpng/sys/modules/evtest/evtest.c#19 (text+ko) ==== @@ -54,16 +54,16 @@ #include #include -#define MAX_EVENT 10 +#define MAX_EVENT 11 #define NUM_THREADS 2 #define EVENT_TYPE_BROADCAST 0x1 static eventhandler_tag first_tag, foo_tag; -static struct cv event_cv, broadcast_cv, event_recvd; +static struct cv event_cv, broadcast_cv, event_recvd, sync_cv; static struct mtx event_mtx; static struct sema evtest_sema; -static int event, broadcast_count, num_threads; +static int event, broadcast_count, num_threads, sync_threads; struct thread_info { struct proc *ti_p; @@ -85,6 +85,7 @@ { "add post handler" }, { "add dump handler" }, { "add removefoo handler" }, + { "add synchronization handler" }, }; static int mod_event(struct module *module, int cmd, void *arg); @@ -99,7 +100,7 @@ EVENTHANDLER_DECLARE(evtest, evtest_fn *); static evtest_fn evtest_print, evtest_wait, evtest_post, evtest_dumplist, - evtest_removefoo; + evtest_removefoo, evtest_sync; struct evtest_fninfo { evtest_fn *ev_fn; @@ -112,6 +113,7 @@ { &evtest_post, "evtest_post" }, { &evtest_dumplist, "evtest_dumplist" }, { &evtest_removefoo, "evtest_removefoo" }, + { &evtest_sync, "evtest_sync" }, { NULL, NULL } }; @@ -223,6 +225,19 @@ mtx_unlock(&event_mtx); } +static void +evtest_sync(void *arg) +{ + + mtx_lock(&event_mtx); + sync_threads++; + if (sync_threads == num_threads) + cv_broadcast(&sync_cv); + else + cv_wait(&sync_cv, &event_mtx); + mtx_unlock(&event_mtx); +} + /* * Yes, this is really gross and greatly violates the eventhandler * abstraction. Deal. @@ -279,6 +294,7 @@ } } event = 0; + sync_threads = 0; cv_signal(&event_recvd); while ((ev = event) == 0) cv_wait(&event_cv, &event_mtx); @@ -348,6 +364,10 @@ first_tag = EVENTHANDLER_REGISTER(evtest, evtest_removefoo, NULL, 5); break; + case 11: + first_tag = EVENTHANDLER_REGISTER(evtest, + evtest_sync, NULL, 5); + break; default: panic("event %d is bogus\n", event); } @@ -406,6 +426,7 @@ mtx_lock(&event_mtx); for (i = 0; i < NUM_THREADS; i++) thread_destroy(i); + cv_destroy(&sync_cv); cv_destroy(&broadcast_cv); sema_destroy(&evtest_sema); mtx_destroy(&event_mtx); @@ -426,6 +447,7 @@ cv_init(&event_recvd, "evrcvd"); sema_init(&evtest_sema, 1, "evtest semaphore"); cv_init(&broadcast_cv, "evbcast"); + cv_init(&sync_cv, "evsync"); error = thread_create(0, "event thread 0"); if (error) { cleanup(); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message