mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Merge r66115 forward to py3k, resolves issue3419
This commit is contained in:
parent
9f76e4f127
commit
824f4f3cdc
1 changed files with 14 additions and 7 deletions
|
@ -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):
|
||||||
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):
|
||||||
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):
|
||||||
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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue