#include <sys/epoll.h>
#include <sys/timerfd.h>
#include <sys/wait.h>
+#include <pthread.h>
#include "sd-id128.h"
#include "sd-daemon.h"
sd_event_source **ret) {
sd_event_source *s;
+ sigset_t ss;
int r;
assert_return(e, -EINVAL);
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
assert_return(!event_pid_changed(e), -ECHILD);
+ r = pthread_sigmask(SIG_SETMASK, NULL, &ss);
+ if (r < 0)
+ return -errno;
+
+ if (!sigismember(&ss, sig))
+ return -EBUSY;
+
if (!e->signal_sources) {
e->signal_sources = new0(sd_event_source*, _NSIG);
if (!e->signal_sources)
p = event_next_pending(e);
if (!p) {
- r = 0;
+ r = 1;
goto finish;
}