Index: src/OFKernelEventObserver.m ================================================================== --- src/OFKernelEventObserver.m +++ src/OFKernelEventObserver.m @@ -264,15 +264,30 @@ _waitingTask = NULL; } Permit(); #elif defined(OF_HAVE_PIPE) - OFEnsure(write(_cancelFD[1], "", 1) > 0); + do { + if (write(_cancelFD[1], "", 1) == 1) + break; + + OFEnsure(errno == EINTR); + } while (true); #elif defined(OF_WII) - OFEnsure(sendto(_cancelFD[1], "", 1, 0, - (struct sockaddr *)&_cancelAddr, 8) > 0); + do { + if (sendto(_cancelFD[1], "", 1, 0, + (struct sockaddr *)&_cancelAddr, 8) == 1) + break; + + OFEnsure(OFSocketErrNo() == EINTR); + } while (true); #else - OFEnsure(sendto(_cancelFD[1], (void *)"", 1, 0, - (struct sockaddr *)&_cancelAddr, sizeof(_cancelAddr)) > 0); + do { + if (sendto(_cancelFD[1], (void *)"", 1, 0, + (struct sockaddr *)&_cancelAddr, sizeof(_cancelAddr)) == 1) + break; + + OFEnsure(OFSocketErrNo() == EINTR); + } while (true); #endif } @end