Mercurial > cosocket
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 |
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 | 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 |