Skip to content

Commit 02120e3

Browse files
author
clowwindy
committed
optimize eventloop
1 parent 111acf6 commit 02120e3

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

shadowsocks/asyncdns.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ def handle_event(self, sock, fd, event):
357357
return
358358
if event & eventloop.POLL_ERR:
359359
logging.error('dns socket err')
360-
self._loop.remove(self._sock, self)
360+
self._loop.remove(self._sock)
361361
self._sock.close()
362362
# TODO when dns server is IPv6
363363
self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
@@ -380,7 +380,7 @@ def remove_callback(self, callback):
380380
del self._cb_to_hostname[callback]
381381
arr = self._hostname_to_cb.get(hostname, None)
382382
if arr:
383-
arr.remove(callback, self)
383+
arr.remove(callback)
384384
if not arr:
385385
del self._hostname_to_cb[hostname]
386386
if hostname in self._hostname_status:
@@ -427,7 +427,7 @@ def close(self):
427427
if self._sock:
428428
if self._loop:
429429
self._loop.remove_periodic(self.handle_periodic)
430-
self._loop.remove(self._sock, self)
430+
self._loop.remove(self._sock)
431431
self._sock.close()
432432
self._sock = None
433433

shadowsocks/eventloop.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -150,29 +150,25 @@ def __init__(self):
150150
else:
151151
raise Exception('can not find any available functions in select '
152152
'package')
153-
self._fd_to_f = {}
154-
self._fd_to_handler = {}
153+
self._fdmap = {} # (f, handler)
155154
self._last_time = time.time()
156155
self._periodic_callbacks = []
157156
self._stopping = False
158157
logging.debug('using event model: %s', model)
159158

160159
def poll(self, timeout=None):
161160
events = self._impl.poll(timeout)
162-
return [(self._fd_to_f[fd], fd, event) for fd, event in events]
161+
return [(self._fdmap[fd][0], fd, event) for fd, event in events]
163162

164163
def add(self, f, mode, handler):
165164
fd = f.fileno()
166-
self._fd_to_f[fd] = f
165+
self._fdmap[fd] = (f, handler)
167166
self._impl.register(fd, mode)
168-
self._fd_to_handler[fd] = handler
169167

170-
def remove(self, f, handler):
168+
def remove(self, f):
171169
fd = f.fileno()
172-
del self._fd_to_f[fd]
170+
del self._fdmap[fd]
173171
self._impl.unregister(fd)
174-
if handler is not None:
175-
del self._fd_to_handler[fd]
176172

177173
def add_periodic(self, callback):
178174
self._periodic_callbacks.append(callback)
@@ -182,9 +178,8 @@ def remove_periodic(self, callback):
182178

183179
def modify(self, f, mode, handler):
184180
fd = f.fileno()
181+
self._fdmap[fd] = (f, handler)
185182
self._impl.modify(fd, mode)
186-
if handler is not None:
187-
self._fd_to_handler[fd] = handler
188183

189184
def stop(self):
190185
self._stopping = True
@@ -209,8 +204,9 @@ def run(self):
209204
continue
210205

211206
for sock, fd, event in events:
212-
handler = self._fd_to_handler.get(fd, None)
207+
handler = self._fdmap.get(fd, None)
213208
if handler is not None:
209+
handler = handler[1]
214210
try:
215211
handler.handle_event(sock, fd, event)
216212
except (OSError, IOError) as e:

shadowsocks/tcprelay.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -534,13 +534,13 @@ def destroy(self):
534534
logging.debug('destroy')
535535
if self._remote_sock:
536536
logging.debug('destroying remote')
537-
self._loop.remove(self._remote_sock, self._server)
537+
self._loop.remove(self._remote_sock)
538538
del self._fd_to_handlers[self._remote_sock.fileno()]
539539
self._remote_sock.close()
540540
self._remote_sock = None
541541
if self._local_sock:
542542
logging.debug('destroying local')
543-
self._loop.remove(self._local_sock, self._server)
543+
self._loop.remove(self._local_sock)
544544
del self._fd_to_handlers[self._local_sock.fileno()]
545545
self._local_sock.close()
546546
self._local_sock = None
@@ -691,7 +691,7 @@ def handle_event(self, sock, fd, event):
691691
def handle_periodic(self):
692692
if self._closed:
693693
if self._server_socket:
694-
self._eventloop.remove(self._server_socket, self)
694+
self._eventloop.remove(self._server_socket)
695695
self._server_socket.close()
696696
self._server_socket = None
697697
logging.info('closed TCP port %d', self._listen_port)
@@ -706,5 +706,5 @@ def close(self, next_tick=False):
706706
if not next_tick:
707707
if self._eventloop:
708708
self._eventloop.remove_periodic(self.handle_periodic)
709-
self._eventloop.remove(self._server_socket, self)
709+
self._eventloop.remove(self._server_socket)
710710
self._server_socket.close()

shadowsocks/udprelay.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def _get_a_server(self):
135135
def _close_client(self, client):
136136
if hasattr(client, 'close'):
137137
self._sockets.remove(client.fileno())
138-
self._eventloop.remove(client, self)
138+
self._eventloop.remove(client)
139139
client.close()
140140
else:
141141
# just an address
@@ -288,5 +288,5 @@ def close(self, next_tick=False):
288288
if not next_tick:
289289
if self._eventloop:
290290
self._eventloop.remove_periodic(self.handle_periodic)
291-
self._eventloop.remove(self._server_socket, self)
291+
self._eventloop.remove(self._server_socket)
292292
self._server_socket.close()

0 commit comments

Comments
 (0)