Date: Sun, 10 Apr 2005 23:06:32 GMT From: David Xu <davidxu@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 74891 for review Message-ID: <200504102306.j3AN6WTu001270@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=74891 Change 74891 by davidxu@davidxu_tiger on 2005/04/10 23:05:43 Introduce SHOULD_REPORT_EVENT macro to test if we should report a event. call _thr_report_create for initial thread Affected files ... .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_create.c#8 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_event.c#9 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_exit.c#6 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_init.c#8 edit .. //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_private.h#14 edit Differences ... ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_create.c#8 (text+ko) ==== @@ -158,7 +158,7 @@ _thr_link(curthread, new_thread); /* Return thread pointer eariler so that new thread can use it. */ (*thread) = new_thread; - if (1) {// curthread->report_events) { + if (SHOULD_REPORT_EVENT(curthread, TD_CREATE)) { THR_THREAD_LOCK(curthread, new_thread); locked = 1; } else ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_event.c#9 (text+ko) ==== @@ -41,32 +41,21 @@ void _thr_report_create(struct pthread *curthread, struct pthread *newthread) { - _thr_report_event(curthread, newthread, TD_CREATE, NULL); + THR_UMTX_LOCK(curthread, &_thr_event_lock); + _thread_event.event = TD_CREATE; + _thread_event.thread = newthread; + _thread_event.data = 0; + _thread_create_bp(); + THR_UMTX_UNLOCK(curthread, &_thr_event_lock); } void _thr_report_death(struct pthread *curthread) { - _thr_report_event(curthread, curthread, TD_DEATH, NULL); -} - -void -_thr_report_event(struct pthread *curthread, struct pthread *thread, - int event, void *data) -{ - if (!(event & (curthread->event_mask | _thread_event_mask))) - return; THR_UMTX_LOCK(curthread, &_thr_event_lock); - _thread_event.event = event; - _thread_event.thread = thread; - _thread_event.data = data; - switch (event) { - case TD_CREATE: - _thread_create_bp(); - break; - case TD_DEATH: - _thread_death_bp(); - break; - } + _thread_event.event = TD_DEATH; + _thread_event.thread = curthread; + _thread_event.data = 0; + _thread_death_bp(); THR_UMTX_UNLOCK(curthread, &_thr_event_lock); } ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_exit.c#6 (text+ko) ==== @@ -130,7 +130,7 @@ THREAD_LIST_UNLOCK(curthread); if (curthread->joiner) _thr_umtx_wake(&curthread->state, INT_MAX); - if (__predict_false(curthread->report_events)) + if (SHOULD_REPORT_EVENT(curthread, TD_DEATH)) _thr_report_death(curthread); thr_exit(&curthread->tid); PANIC("thr_exit() returned"); ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_init.c#8 (text+ko) ==== @@ -309,6 +309,7 @@ _thr_initial = curthread; SIGDELSET(oldset, SIGCANCEL); __sys_sigprocmask(SIG_SETMASK, &oldset, NULL); + _thr_report_create(curthread, curthread); } } ==== //depot/projects/davidxu_thread/src/lib/libthr/thread/thr_private.h#14 (text+ko) ==== @@ -583,8 +583,11 @@ }; /* XXX this must match thread_db.h */ -#define TD_CREATE 0x0004 +#define TD_CREATE 0x0004 #define TD_DEATH 0x0008 +#define SHOULD_REPORT_EVENT(curthr, e) \ + (curthr->report_events && \ + (((curthr)->event_mask | _thread_event_mask ) & e) != 0) extern int __isthreaded; @@ -740,8 +743,6 @@ void _thr_report_create(struct pthread *curthread, struct pthread *newthread); void _thr_report_death(struct pthread *curthread); -void _thr_report_event(struct pthread *curthread, struct pthread *thread, - int event, void *data); void _thread_create_bp(void); void _thread_death_bp(void);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504102306.j3AN6WTu001270>