Skip site navigation (1)Skip section navigation (2)
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>