Date: Mon, 10 Mar 2003 14:42:38 -0800 (PST) From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 26643 for review Message-ID: <200303102242.h2AMgcHJ055477@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=26643 Change 26643 by jhb@jhb_blue on 2003/03/10 14:42:03 Partial fixes for the broadcast event stuff. It still doesn't work but I need to work on this in xemacs, not vi. Affected files ... .. //depot/projects/smpng/sys/modules/evtest/evtest.c#6 edit Differences ... ==== //depot/projects/smpng/sys/modules/evtest/evtest.c#6 (text+ko) ==== @@ -60,7 +60,7 @@ static eventhandler_tag first_tag; static struct cv event_cv; static struct mtx event_mtx; -static struct sema evtest_sema; +static struct sema evtest_sema, broadcast_sema; static int event; struct thread_info { @@ -121,13 +121,17 @@ return (EINVAL); ei = &events[new_event]; +printf("%s: posting event %d (%s, %d)\n", __func__, new_event, ei->ei_help, + ei->ei_flags); mtx_lock(&event_mtx); KASSERT(event == 0, ("event %d was unhandled", event)); if (ei->ei_flags & EVENT_TYPE_BROADCAST) { for (i = 0; i < NUM_THREADS; i++) { if (threads[i].ti_p != NULL) threads[i].ti_event = new_event; + sema_post(&broadcast_sema); } + event = -1; cv_broadcast(&event_cv); } else { event = new_event; @@ -238,7 +242,7 @@ if (ev >= 1 && ev <= MAX_EVENT && events[ev].ei_help != NULL) printf("crash: %s\n", events[ev].ei_help); switch (ev) { - case 0: + case -1: /* Handle broadcast events. */ switch (*td_ev) { case -1: @@ -260,6 +264,7 @@ printf("Unknown broadcast event %d\n", *td_ev); } *td_ev = 0; + sema_wait(&broadcast_sema); break; case 1: for (ev = 1; ev <= MAX_EVENT; ev++) @@ -344,6 +349,7 @@ mtx_lock(&event_mtx); for (i = 0; i < NUM_THREADS; i++) thread_destroy(i); + sema_destroy(&broadcast_sema); sema_destroy(&evtest_sema); mtx_destroy(&event_mtx); cv_destroy(&event_cv); @@ -358,6 +364,7 @@ mtx_init(&event_mtx, "evtest event", NULL, MTX_DEF); cv_init(&event_cv, "evtest"); sema_init(&evtest_sema, 1, "evtest semaphore"); + sema_init(&broadcast_sema, 0, "broadcast semaphore"); 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303102242.h2AMgcHJ055477>