Date: Sat, 28 Jun 2003 18:01:48 +0800 From: "David Xu" <davidxu@freebsd.org> To: <src-committers@freebsd.org>, <cvs-src@freebsd.org>, <cvs-all@freebsd.org> Subject: Re: cvs commit: src/lib/libpthread pthread.map src/lib/libpthread/support thr_support.c src/lib/libpthread/thread thr_info.c thr_init.c thr_kern.c thr_kill.c thr_private.h thr_sig.c thr_sigaction.c thr_sigmask.c thr_sigpending.c thr Message-ID: <000b01c33d5c$4bcf7ac0$0701a8c0@tiger> References: <200306280955.h5S9t3sI062019@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Forgot to say, Reviewd by: deischen David Xu ----- Original Message -----=20 From: "David Xu" <davidxu@FreeBSD.org> To: <src-committers@FreeBSD.org>; <cvs-src@FreeBSD.org>; = <cvs-all@FreeBSD.org> Sent: Saturday, June 28, 2003 5:55 PM Subject: cvs commit: src/lib/libpthread pthread.map = src/lib/libpthread/support thr_support.c src/lib/libpthread/thread = thr_info.c thr_init.c thr_kern.c thr_kill.c thr_private.h thr_sig.c = thr_sigaction.c thr_sigmask.c thr_sigpending.c thr_sigprocmask.c = thr_sigsuspend.c ... > davidxu 2003/06/28 02:55:02 PDT >=20 > FreeBSD src repository >=20 > Modified files: > lib/libpthread pthread.map=20 > lib/libpthread/support thr_support.c=20 > lib/libpthread/thread thr_info.c thr_init.c thr_kern.c=20 > thr_kill.c thr_private.h thr_sig.c=20 > thr_sigaction.c thr_sigmask.c=20 > thr_sigpending.c thr_sigprocmask.c=20 > thr_sigsuspend.c thr_sigwait.c=20 > Log: > o Use a daemon thread to monitor signal events in kernel, if pending > signals were changed in kernel, it will retrieve the pending set = and > try to find a thread to dispatch the signal. The dispatching = process > can be rolled back if the signal is no longer in kernel. > =20 > o Create two functions _thr_signal_init() and _thr_signal_deinit(), > all signal action settings are retrieved from kernel when = threading > mode is turned on, after a fork(), child process will reset them = to > user settings by calling _thr_signal_deinit(). when threading mode > is not turned on, all signal operations are direct past to kernel. > =20 > o When a thread generated a synchoronous signals and its context = returned > from completed list, UTS will retrieve the signal from its mailbox = and try > to deliver the signal to thread. > =20 > o Context signal mask is now only used when delivering signals, = thread's > current signal mask is always the one in pthread structure. > =20 > o Remove have_signals field in pthread structure, replace it with > psf_valid in pthread_signal_frame. when psf_valid is true, in = context > switch time, thread will backout itself from some mutex/condition > internal queues, then begin to process signals. when a thread is = not > at blocked state and running, check_pending indicates there are = signals > for the thread, after preempted and then resumed time, UTS will = try to > deliver signals to the thread. > =20 > o At signal delivering time, not only pending signals in thread will = be > scanned, process's pending signals will be scanned too. > =20 > o Change sigwait code a bit, remove field sigwait in = pthread_wait_data, > replace it with oldsigmask in pthread structure, when a thread = calls > sigwait(), its current signal mask is backuped to oldsigmask, and = waitset > is copied to its signal mask and when the thread gets a signal in = the > waitset range, its current signal mask is restored from = oldsigmask, > these are done in atomic fashion. > =20 > o Two additional POSIX APIs are implemented, sigwaitinfo() and = sigtimedwait(). > =20 > o Signal code locking is better than previous, there is fewer race = conditions. > =20 > o Temporary disable most of code in _kse_single_thread as it is not = safe > after fork(). > =20 > Revision Changes Path > 1.2 +4 -0 src/lib/libpthread/pthread.map > 1.3 +3 -0 src/lib/libpthread/support/thr_support.c > 1.24 +16 -1 src/lib/libpthread/thread/thr_info.c > 1.56 +4 -39 src/lib/libpthread/thread/thr_init.c > 1.72 +138 -96 src/lib/libpthread/thread/thr_kern.c > 1.16 +1 -1 src/lib/libpthread/thread/thr_kill.c > 1.91 +19 -14 src/lib/libpthread/thread/thr_private.h > 1.56 +443 -345 src/lib/libpthread/thread/thr_sig.c > 1.19 +10 -3 src/lib/libpthread/thread/thr_sigaction.c > 1.14 +11 -14 src/lib/libpthread/thread/thr_sigmask.c > 1.13 +6 -1 src/lib/libpthread/thread/thr_sigpending.c > 1.16 +3 -2 src/lib/libpthread/thread/thr_sigprocmask.c > 1.19 +15 -4 src/lib/libpthread/thread/thr_sigsuspend.c > 1.26 +143 -69 src/lib/libpthread/thread/thr_sigwait.c >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?000b01c33d5c$4bcf7ac0$0701a8c0>