Beispiel #1
0
    def set_sig_handler(self, sig, handler):
        global _SigHandlers
        global _SigSetHandled

        signal.signal(sig, _SigHandler)
        _SigHandlers[sig] = handler
        pysigset.sigaddset(_SigSetHandled, sig)
Beispiel #2
0
	def get_signalfd(self, sig, close_on_fork=True):
		sigset = SIGSET()
		sigaddset(sigset, sig)
		sigprocmask(SIG_BLOCK, sigset, NULL)

		fd = linuxfd.signalfd(signalset={sig}, nonBlocking=True)
		if close_on_fork:
			self._close_on_fork_fds.add(fd)

		return fd
Beispiel #3
0
	def release(self, fd):
		# TODO: singledispatch
		if fd not in self._close_on_fork_fds:
			return

		self._close_on_fork_fds.remove(fd)
		fd.close()

		if isinstance(fd, linuxfd.signalfd):
			sigset = SIGSET()
			for sig in fd.signals():
				sigaddset(sigset, sig)
			logger.debug('unblock sigset %s' % sigset)
			sigprocmask(SIG_UNBLOCK, sigset, NULL)
Beispiel #4
0
 def unmask_sigio(self):
     sigemptyset(self.sigset)
     sigaddset(self.sigset, signal.SIGIO)
     sigprocmask(SIG_UNBLOCK, self.sigset, 0)