Kaydet (Commit) 824f4f3c authored tarafından Jesse Noller's avatar Jesse Noller

Merge r66115 forward to py3k, resolves issue3419

üst 9f76e4f1
...@@ -378,7 +378,13 @@ class Server(object): ...@@ -378,7 +378,13 @@ class Server(object):
self.id_to_obj[ident] = (obj, set(exposed), method_to_typeid) self.id_to_obj[ident] = (obj, set(exposed), method_to_typeid)
if ident not in self.id_to_refcount: if ident not in self.id_to_refcount:
self.id_to_refcount[ident] = None self.id_to_refcount[ident] = 0
# increment the reference count immediately, to avoid
# this object being garbage collected before a Proxy
# object for it can be created. The caller of create()
# is responsible for doing a decref once the Proxy object
# has been created.
self.incref(c, ident)
return ident, tuple(exposed) return ident, tuple(exposed)
finally: finally:
self.mutex.release() self.mutex.release()
...@@ -400,11 +406,7 @@ class Server(object): ...@@ -400,11 +406,7 @@ class Server(object):
def incref(self, c, ident): def incref(self, c, ident):
self.mutex.acquire() self.mutex.acquire()
try: try:
try: self.id_to_refcount[ident] += 1
self.id_to_refcount[ident] += 1
except TypeError:
assert self.id_to_refcount[ident] is None
self.id_to_refcount[ident] = 1
finally: finally:
self.mutex.release() self.mutex.release()
...@@ -641,6 +643,8 @@ class BaseManager(object): ...@@ -641,6 +643,8 @@ class BaseManager(object):
token, self._serializer, manager=self, token, self._serializer, manager=self,
authkey=self._authkey, exposed=exp authkey=self._authkey, exposed=exp
) )
conn = self._Client(token.address, authkey=self._authkey)
dispatch(conn, None, 'decref', (token.id,))
return proxy return proxy
temp.__name__ = typeid temp.__name__ = typeid
setattr(cls, typeid, temp) setattr(cls, typeid, temp)
...@@ -733,10 +737,13 @@ class BaseProxy(object): ...@@ -733,10 +737,13 @@ class BaseProxy(object):
elif kind == '#PROXY': elif kind == '#PROXY':
exposed, token = result exposed, token = result
proxytype = self._manager._registry[token.typeid][-1] proxytype = self._manager._registry[token.typeid][-1]
return proxytype( proxy = proxytype(
token, self._serializer, manager=self._manager, token, self._serializer, manager=self._manager,
authkey=self._authkey, exposed=exposed authkey=self._authkey, exposed=exposed
) )
conn = self._Client(token.address, authkey=self._authkey)
dispatch(conn, None, 'decref', (token.id,))
return proxy
raise convert_to_error(kind, result) raise convert_to_error(kind, result)
def _getvalue(self): def _getvalue(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment