annotate channels.py @ 20:dc3dce13dd3b

Fixed memory leak in channels.py, I think.
author Atul Varma <varmaa@toolness.com>
date Sun, 19 Apr 2009 22:11:46 -0700
parents 4b3a30d863cc
children b77e679ce993
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
1 import weakref
16
4b3a30d863cc Added some TODOs.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
2
13
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 _channels = {}
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
4
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
5 class until_message_sent(object):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
6 def __init__(self, channel_name, message):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
7 self.channel_name = channel_name
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 self.message = message
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 def execute(self, dispatcher):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
11 if self.channel_name in _channels:
20
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
12 for weakling in _channels[self.channel_name].itervaluerefs():
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
13 receiver = weakling()
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
14 if receiver:
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
15 receiver.return_from_yield(self.message)
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
16 del _channels[self.channel_name]
13
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
17 dispatcher.return_from_yield()
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
18
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
19 class until_message_received(object):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
20 def __init__(self, channel_name):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
21 self.channel_name = channel_name
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
22
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
23 def execute(self, dispatcher):
65482f4e2555 Added a really simple channel communication system, somewhat similar to that of Stackless.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
24 if self.channel_name not in _channels:
20
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
25 _channels[self.channel_name] = weakref.WeakValueDictionary()
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
26 fd = dispatcher.socket.fileno()
dc3dce13dd3b Fixed memory leak in channels.py, I think.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
27 _channels[self.channel_name][fd] = dispatcher