cvs commit: src/lib/libpthread pthread.mapsrc/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...

David Xu davidxu at FreeBSD.org
Sat Jun 28 02:55:04 PDT 2003


davidxu     2003/06/28 02:55:02 PDT

  FreeBSD src repository

  Modified files:
    lib/libpthread       pthread.map 
    lib/libpthread/support thr_support.c 
    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 thr_sigwait.c 
  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.
  
  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.
  
  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.
  
  o Context signal mask is now only used when delivering signals, thread's
    current signal mask is always the one in pthread structure.
  
  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.
  
  o At signal delivering time, not only pending signals in thread will be
    scanned, process's pending signals will be scanned too.
  
  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.
  
  o Two additional POSIX APIs are implemented, sigwaitinfo() and sigtimedwait().
  
  o Signal code locking is better than previous, there is fewer race conditions.
  
  o Temporary disable most of code in _kse_single_thread as it is not safe
    after fork().
  
  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


More information about the cvs-src mailing list