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:
Adhemerval Zanella 2019-12-05 14:56:06 -03:00
parent 11519fd0c9
commit 58bd592536
2 changed files with 15 additions and 15 deletions

View File

@ -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);
}

View File

@ -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. */