diff --git a/headers/posix/signal.h b/headers/posix/signal.h index 3ee35fd56c..06c0d7c8e4 100644 --- a/headers/posix/signal.h +++ b/headers/posix/signal.h @@ -165,6 +165,7 @@ int sigdelset(sigset_t *set, int signo); int sigismember(const sigset_t *set, int signo); int sigignore(int signo); int sighold(int signo); +int sigrelse(int signo); const char *strsignal(int sig); diff --git a/src/system/libroot/posix/signal/Jamfile b/src/system/libroot/posix/signal/Jamfile index 057fbebfa1..1e1fc80494 100644 --- a/src/system/libroot/posix/signal/Jamfile +++ b/src/system/libroot/posix/signal/Jamfile @@ -15,6 +15,7 @@ MergeObject posix_signal.o : signal.c sigpending.c sigprocmask.c + sigrelse.cpp sigset.c sigsuspend.c strsignal.c diff --git a/src/system/libroot/posix/signal/sigrelse.cpp b/src/system/libroot/posix/signal/sigrelse.cpp new file mode 100644 index 0000000000..bcaa4e279f --- /dev/null +++ b/src/system/libroot/posix/signal/sigrelse.cpp @@ -0,0 +1,22 @@ +/* + * Copyright 2007, Vasilis Kaoutsis, kaoutsis@sch.gr + * Distributed under the terms of the MIT License. + */ + + +#include + + +int +sigrelse(int signal) +{ + // make an empty set + // and add the signal + sigset_t tempSignalSet; + sigemptyset(&tempSignalSet); + if (sigaddset(&tempSignalSet, signal) == -1) + return -1; + + // remove the signal from the calling process' signal mask + return sigprocmask(SIG_UNBLOCK, &tempSignalSet, NULL); +}