From owner-cvs-all@FreeBSD.ORG Sat Jun 28 02:58:40 2003 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EA80C37B401; Sat, 28 Jun 2003 02:58:40 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id A95CF44014; Sat, 28 Jun 2003 02:58:39 -0700 (PDT) (envelope-from davidxu@freebsd.org) Received: from tiger (davidxu@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with SMTP id h5S9wbUp014989; Sat, 28 Jun 2003 02:58:38 -0700 (PDT) (envelope-from davidxu@freebsd.org) Message-ID: <000b01c33d5c$4bcf7ac0$0701a8c0@tiger> From: "David Xu" To: , , References: <200306280955.h5S9t3sI062019@repoman.freebsd.org> Date: Sat, 28 Jun 2003 18:01:48 +0800 MIME-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 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 X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: David Xu List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Jun 2003 09:58:41 -0000 Forgot to say, Reviewd by: deischen David Xu ----- Original Message -----=20 From: "David Xu" To: ; ; = 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 >