mirror of git://sourceware.org/git/glibc.git
Fix return code for __libc_signal_* functions
The functions do not fail regardless of the argument value. Also, for Linux the return value is not correct on some platforms due the missing usage of INTERNAL_SYSCALL_ERROR_P / INTERNAL_SYSCALL_ERRNO macros. Checked on x86_64-linux-gnu, i686-linux-gnu, and sparc64-linux-gnu.
This commit is contained in:
parent
11519fd0c9
commit
58bd592536
|
|
@ -34,28 +34,28 @@ __clear_internal_signals (sigset_t *set)
|
|||
{
|
||||
}
|
||||
|
||||
static inline int
|
||||
static inline void
|
||||
__libc_signal_block_all (sigset_t *set)
|
||||
{
|
||||
sigset_t allset;
|
||||
__sigfillset (&allset);
|
||||
return __sigprocmask (SIG_BLOCK, &allset, set);
|
||||
__sigprocmask (SIG_BLOCK, &allset, set);
|
||||
}
|
||||
|
||||
static inline int
|
||||
static inline void
|
||||
__libc_signal_block_app (sigset_t *set)
|
||||
{
|
||||
sigset_t allset;
|
||||
__sigfillset (&allset);
|
||||
__clear_internal_signals (&allset);
|
||||
return __sigprocmask (SIG_BLOCK, &allset, set);
|
||||
__sigprocmask (SIG_BLOCK, &allset, set);
|
||||
}
|
||||
|
||||
/* Restore current process signal mask. */
|
||||
static inline int
|
||||
static inline void
|
||||
__libc_signal_restore_set (const sigset_t *set)
|
||||
{
|
||||
return __sigprocmask (SIG_SETMASK, set, NULL);
|
||||
__sigprocmask (SIG_SETMASK, set, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -59,32 +59,32 @@ static const sigset_t sigall_set = {
|
|||
};
|
||||
|
||||
/* Block all signals, including internal glibc ones. */
|
||||
static inline int
|
||||
static inline void
|
||||
__libc_signal_block_all (sigset_t *set)
|
||||
{
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_BLOCK, &sigall_set,
|
||||
set, _NSIG / 8);
|
||||
INTERNAL_SYSCALL_CALL (rt_sigprocmask, err, SIG_BLOCK, &sigall_set, set,
|
||||
_NSIG / 8);
|
||||
}
|
||||
|
||||
/* Block all application signals (excluding internal glibc ones). */
|
||||
static inline int
|
||||
static inline void
|
||||
__libc_signal_block_app (sigset_t *set)
|
||||
{
|
||||
sigset_t allset = sigall_set;
|
||||
__clear_internal_signals (&allset);
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_BLOCK, &allset,
|
||||
set, _NSIG / 8);
|
||||
INTERNAL_SYSCALL_CALL (rt_sigprocmask, err, SIG_BLOCK, &allset, set,
|
||||
_NSIG / 8);
|
||||
}
|
||||
|
||||
/* Restore current process signal mask. */
|
||||
static inline int
|
||||
static inline void
|
||||
__libc_signal_restore_set (const sigset_t *set)
|
||||
{
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, set, NULL,
|
||||
_NSIG / 8);
|
||||
INTERNAL_SYSCALL_CALL (rt_sigprocmask, err, SIG_SETMASK, set, NULL,
|
||||
_NSIG / 8);
|
||||
}
|
||||
|
||||
/* Used to communicate with signal handler. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue