50 if ( d->_signalRefCount.count(signum) != 0 && d->_signalRefCount[signum] > 0 ) {
52 d->_signalRefCount[signum]++;
55 const auto &handleError = [&]() {
56 d->_signalRefCount.erase ( signum );
61 d->_signalRefCount[signum] = 1;
64 sigemptyset (&sigMask );
67 for (
const auto &sig : d->_signalRefCount ) {
68 sigaddset(&sigMask, sig.first);
74 if (pthread_sigmask (SIG_BLOCK, &sigMask, NULL) == -1) {
80 zypp::AutoFD aFd = signalfd ( d->_signalFd, &sigMask, SFD_NONBLOCK | SFD_CLOEXEC );
85 if ( d->_signalFd != aFd ) {
98 if ( !d->_signalRefCount.count(signum) || d->_signalRefCount[signum] == 0 ) {
101 d->_signalRefCount[signum]--;
103 if ( d->_signalRefCount[signum] <= 0 ) {
105 d->_signalRefCount.erase(signum);
109 sigemptyset ( &sigMask );
110 for (
const auto &sig : d->_signalRefCount ) {
111 sigaddset(&sigMask, sig.first);
114 auto res = signalfd ( d->_signalFd, &sigMask, SFD_NONBLOCK | SFD_CLOEXEC );
116 WAR <<
"Failed to update signalfd with errno: " <<
zypp::Errno() << std::endl;
121 sigemptyset ( &sigMask );
122 sigaddset(&sigMask, signum);
123 pthread_sigmask(SIG_UNBLOCK, &sigMask, NULL);
126 if ( d->_signalRefCount.size () == 0 ) {