[svn] commit: r3261 - /branches/trac335/src/lib/python/isc/notify/notify_out.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Oct 18 14:53:30 UTC 2010
Author: vorner
Date: Mon Oct 18 14:53:29 2010
New Revision: 3261
Log:
Use single-byte wakeup, nonblocking read
* Avoids split data into multiple .read() calls
* Workaround for rare linux bug
Modified:
branches/trac335/src/lib/python/isc/notify/notify_out.py
Modified: branches/trac335/src/lib/python/isc/notify/notify_out.py
==============================================================================
--- branches/trac335/src/lib/python/isc/notify/notify_out.py (original)
+++ branches/trac335/src/lib/python/isc/notify/notify_out.py Mon Oct 18 14:53:29 2010
@@ -19,6 +19,7 @@
import socket
import threading
import time
+import errno
from isc.datasrc import sqlite3_ds
import isc
try:
@@ -44,7 +45,7 @@
_BAD_QR = 4
_BAD_REPLY_PACKET = 5
-SOCK_DATA = b'somedata'
+SOCK_DATA = b's'
def addr_to_str(addr):
return '%s#%s' % (addr[0], addr[1])
@@ -106,7 +107,8 @@
self._notifying_zones = []
self._log = log
self._serving = False
- self._read_sock = None
+ self._read_sock, self._write_sock = socket.socketpair()
+ self._read_sock.setblocking(False)
self.notify_num = 0 # the count of in progress notifies
self._verbose = verbose
self._lock = threading.Lock()
@@ -183,7 +185,6 @@
# Prepare for launch
self._serving = True
- self._read_sock, self._write_sock = socket.socketpair()
started_event = threading.Event()
# Start
@@ -305,9 +306,14 @@
if err.args[0] != EINTR:
return {}, {}
- if (self._read_sock in r_fds) and \
- (self._read_sock.recv(len(SOCK_DATA)) == SOCK_DATA):
- return {}, {} # user has called shutdown()
+ if self._read_sock in r_fds: # user has called shutdown()
+ try:
+ # Noone should write anything else than shutdown
+ assert self._read_sock.recv(len(SOCK_DATA)) == SOCK_DATA
+ return {}, {}
+ except socket.error as e: # Workaround around rare linux bug
+ if e.errno != errno.EAGAIN and e.errno != errno.EWOULDBLOCK:
+ raise
not_replied_zones = {}
replied_zones = {}
More information about the bind10-changes
mailing list