[Pkg-bitcoin-commits] [python-quamash] 51/269: Start fixing signal handling

Jonas Smedegaard dr at jones.dk
Fri Nov 24 11:26:15 UTC 2017


This is an automated email from the git hooks/post-receive script.

js pushed a commit to branch master
in repository python-quamash.

commit 2ae65afa14c8ecec6a878b60c551e4a2e9ef0746
Author: Arve Knudsen <arve.knudsen at gmail.com>
Date:   Fri Jul 4 06:49:55 2014 +0200

    Start fixing signal handling
---
 quamash/__init__.py | 44 ++++++++++++++++++++++++++++----------------
 1 file changed, 28 insertions(+), 16 deletions(-)

diff --git a/quamash/__init__.py b/quamash/__init__.py
index 98dc82d..7a5829e 100644
--- a/quamash/__init__.py
+++ b/quamash/__init__.py
@@ -206,13 +206,31 @@ class QEventLoop(QtCore.QObject, _baseclass):
 		self.__debug_enabled = False
 		self.__default_executor = None
 		self.__exception_handler = None
+		self.__signal_safe_callbacks = []
 
-		super(QEventLoop, self).__init__()
-		_baseclass.__init__(self, _selector_cls())
+		print('Initing Qt')
+		QtCore.QObject.__init__(self)
+		print('Inited')
+		# _baseclass.__init__(self, _selector_cls())
 
 		self.__event_poller = _EventPoller(self._selector)
 		self.__event_poller.sig_events.connect(self.__on_events)
 
+		socket_notifier = QtCore.QSocketNotifier(self._ssock.fileno(), QtCore.QSocketNotifier.Read, self)
+		socket_notifier.activated.connect(self.__wake_on_socket)
+
+	def __wake_on_socket(self):
+		self._logger.info('Waking on socket notification')
+		for i, handle in enumerate(self.__signal_safe_callbacks[:]):
+			self.__add_callback(0, handle)
+			del self.__signal_safe_callbacks[i]
+
+	def _add_callback_signalsafe(self, handle):
+		"""Add callback in signal safe manner."""
+		self._logger.info('Adding callback signal safe: {}'.format(handle))
+		self.__signal_safe_callbacks.append(handle)
+		self._write_to_self()
+
 	def run_forever(self):
 		"""Run eventloop forever."""
 		def stop_io_event_loop():
@@ -220,7 +238,7 @@ class QEventLoop(QtCore.QObject, _baseclass):
 			self._logger.debug('IO event loop stopped')
 			semaphore.release()
 
-		self.__start_io_event_loop()
+		# self.__start_io_event_loop()
 
 		semaphore = threading.Semaphore(0)
 		self.__is_running = True
@@ -235,7 +253,7 @@ class QEventLoop(QtCore.QObject, _baseclass):
 			self._logger.debug('Stopping event poller')
 			self.__event_poller.stop()
 			self._logger.debug('Stopping IO event loop...')
-			self.__io_event_loop.call_soon_threadsafe(stop_io_event_loop)
+			# self.__io_event_loop.call_soon_threadsafe(stop_io_event_loop)
 			with semaphore:
 				self.__is_running = False
 
@@ -289,12 +307,14 @@ class QEventLoop(QtCore.QObject, _baseclass):
 			.format(
 				callback, args, delay
 			))
+		self.__add_callback(delay, asyncio.Handle(callback, args, self))
 
+	def __add_callback(self, delay, handle):
 		def upon_timeout():
 			self.__timers.remove(timer)
-			self._logger.debug('Callback timer fired, calling {} with args {}'.format(
-				callback, args))
-			callback(*args)
+			self._logger.debug('Callback timer fired, calling {}'.format(
+				handle))
+			handle._run()
 
 		timer = QtCore.QTimer(self.__app)
 		timer.timeout.connect(upon_timeout)
@@ -350,14 +370,6 @@ class QEventLoop(QtCore.QObject, _baseclass):
 	def set_default_executor(self, executor):
 		self.__default_executor = executor
 
-	# Signal handling.
-
-	def add_signal_handler(self, sig, callback, *args):
-		return self.__handler_helper(self.add_signal_handler, sig, callback, *args)
-
-	def remove_signal_handler(self, sig):
-		return self.__handler_helper(self.remove_signal_handler, sig)
-
 	# Error handlers.
 
 	def set_exception_handler(self, handler):
@@ -461,7 +473,7 @@ class QEventLoop(QtCore.QObject, _baseclass):
 			handler = target(*args)
 			semaphore.release()
 
-		self.__io_event_loop.call_soon_threadsafe(helper_target)
+		# self.__io_event_loop.call_soon_threadsafe(helper_target)
 		with semaphore:
 			return handler
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-bitcoin/python-quamash.git



More information about the Pkg-bitcoin-commits mailing list