You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by ma...@apache.org on 2004/04/21 03:01:28 UTC

cvs commit: apr/threadproc/unix signals.c

madhum      2004/04/20 18:01:28

  Modified:    .        CHANGES
               threadproc/unix signals.c
  Log:
  Added two new functions apr_signal_block and apr_signal_unblock to
  block/unblock only certain signals.
  
  Revision  Changes    Path
  1.462     +3 -0      apr/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apr/CHANGES,v
  retrieving revision 1.461
  retrieving revision 1.462
  diff -u -r1.461 -r1.462
  --- CHANGES	18 Apr 2004 12:12:49 -0000	1.461
  +++ CHANGES	21 Apr 2004 01:01:28 -0000	1.462
  @@ -7,6 +7,9 @@
   
   Changes with APR 1.0
   
  +  *) Add new functions apr_signal_block, apr_signal_unblock to block/unblock
  +     the delivery of a particular signal. [Madhusudan Mathihalli]
  +
     *) Add support for developers to use their own hashing function with
        apr_hash_make_custom.  [Ami Ganguli <hs...@yahoo.co.uk>]
   
  
  
  
  1.58      +46 -0     apr/threadproc/unix/signals.c
  
  Index: signals.c
  ===================================================================
  RCS file: /home/cvs/apr/threadproc/unix/signals.c,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- signals.c	13 Feb 2004 09:38:37 -0000	1.57
  +++ signals.c	21 Apr 2004 01:01:28 -0000	1.58
  @@ -423,4 +423,50 @@
       return rv;
   }
   
  +APR_DECLARE(apr_status_t) apr_signal_block(int signum)
  +{
  +    sigset_t sig_mask;
  +    int rv;
  +
  +    sigemptyset(&sig_mask);
  +
  +    sigaddset(&sig_mask, signum);
  +
  +#if defined(SIGPROCMASK_SETS_THREAD_MASK)
  +    if ((rv = sigprocmask(SIG_BLOCK, &sig_mask, NULL)) != 0) {
  +        rv = errno;
  +    }
  +#else
  +    if ((rv = pthread_sigmask(SIG_BLOCK, &sig_mask, NULL)) != 0) {
  +#ifdef PTHREAD_SETS_ERRNO
  +        rv = errno;
  +#endif
  +    }
  +#endif
  +    return rv;
  +}
  +
  +APR_DECLARE(apr_status_t) apr_signal_unblock(int signum)
  +{
  +    sigset_t sig_mask;
  +    int rv;
  +
  +    sigemptyset(&sig_mask);
  +
  +    sigaddset(&sig_mask, signum);
  +
  +#if defined(SIGPROCMASK_SETS_THREAD_MASK)
  +    if ((rv = sigprocmask(SIG_UNBLOCK, &sig_mask, NULL)) != 0) {
  +        rv = errno;
  +    }
  +#else
  +    if ((rv = pthread_sigmask(SIG_UNBLOCK, &sig_mask, NULL)) != 0) {
  +#ifdef PTHREAD_SETS_ERRNO
  +        rv = errno;
  +#endif
  +    }
  +#endif
  +    return rv;
  +}
  +
   #endif