##// END OF EJS Templates
ignore EINTR in channel loops...
MinRK -
Show More
@@ -17,6 +17,7 b' TODO'
17
17
18 # Standard library imports.
18 # Standard library imports.
19 import atexit
19 import atexit
20 import errno
20 from Queue import Queue, Empty
21 from Queue import Queue, Empty
21 from subprocess import Popen
22 from subprocess import Popen
22 import signal
23 import signal
@@ -108,6 +109,19 b' class ZmqSocketChannel(Thread):'
108 raise InvalidPortNumber(message)
109 raise InvalidPortNumber(message)
109 self._address = address
110 self._address = address
110
111
112 def _run_loop(self):
113 """Run my loop, ignoring EINTR events in the poller"""
114 while True:
115 try:
116 self.ioloop.start()
117 except zmq.ZMQError as e:
118 if e.errno == errno.EINTR:
119 continue
120 else:
121 raise
122 else:
123 break
124
111 def stop(self):
125 def stop(self):
112 """Stop the channel's activity.
126 """Stop the channel's activity.
113
127
@@ -178,7 +192,7 b' class XReqSocketChannel(ZmqSocketChannel):'
178 self.iostate = POLLERR|POLLIN
192 self.iostate = POLLERR|POLLIN
179 self.ioloop.add_handler(self.socket, self._handle_events,
193 self.ioloop.add_handler(self.socket, self._handle_events,
180 self.iostate)
194 self.iostate)
181 self.ioloop.start()
195 self._run_loop()
182
196
183 def stop(self):
197 def stop(self):
184 self.ioloop.stop()
198 self.ioloop.stop()
@@ -385,7 +399,7 b' class SubSocketChannel(ZmqSocketChannel):'
385 self.iostate = POLLIN|POLLERR
399 self.iostate = POLLIN|POLLERR
386 self.ioloop.add_handler(self.socket, self._handle_events,
400 self.ioloop.add_handler(self.socket, self._handle_events,
387 self.iostate)
401 self.iostate)
388 self.ioloop.start()
402 self._run_loop()
389
403
390 def stop(self):
404 def stop(self):
391 self.ioloop.stop()
405 self.ioloop.stop()
@@ -473,7 +487,7 b' class RepSocketChannel(ZmqSocketChannel):'
473 self.iostate = POLLERR|POLLIN
487 self.iostate = POLLERR|POLLIN
474 self.ioloop.add_handler(self.socket, self._handle_events,
488 self.ioloop.add_handler(self.socket, self._handle_events,
475 self.iostate)
489 self.iostate)
476 self.ioloop.start()
490 self._run_loop()
477
491
478 def stop(self):
492 def stop(self):
479 self.ioloop.stop()
493 self.ioloop.stop()
@@ -591,7 +605,16 b' class HBSocketChannel(ZmqSocketChannel):'
591 # returns quickly. Note: poll timeout is in
605 # returns quickly. Note: poll timeout is in
592 # milliseconds.
606 # milliseconds.
593 if until_dead > 0.0:
607 if until_dead > 0.0:
608 while True:
609 try:
594 self.poller.poll(1000 * until_dead)
610 self.poller.poll(1000 * until_dead)
611 except zmq.ZMQError as e:
612 if e.errno == errno.EINTR:
613 continue
614 else:
615 raise
616 else:
617 break
595
618
596 since_last_heartbeat = time.time()-request_time
619 since_last_heartbeat = time.time()-request_time
597 if since_last_heartbeat > self.time_to_dead:
620 if since_last_heartbeat > self.time_to_dead:
General Comments 0
You need to be logged in to leave comments. Login now