Nir Soffer has posted comments on this change.
Change subject: clientIF: Use a weakref.proxy when registering contEIOVMs
......................................................................
Patch Set 1:
(1 comment)
http://gerrit.ovirt.org/#/c/35436/1/vdsm/clientIF.py
File vdsm/clientIF.py:
Line 78: self._shutdownSemaphore = threading.Semaphore()
Line 79: self.irs = irs
Line 80: if self.irs:
Line 81: cb = partial(clientIF.contEIOVms, proxy(self))
Line 82: self.irs.registerDomainStateChangeCallback(cb)
This does not work, because cb is collected when __init__ is finished, so the weak
reference in the Event is dead after __init__, same issue this patch try to solve.
We must keep a reference to the partial in the object, so the partial is collected when
the object is collected:
self._contEIOVMs = partial(...)
self.irs.registerDomainStateChangeCallback(self._contEIOVMs)
Ugly but works.
Here is a unit test I used to verify this, added to miscTests.EventTests
def testInstanceMethod(self):
ev = threading.Event()
event = misc.Event("name", sync=True)
class A(object):
def __init__(self):
cb = partial(A.callback, weakref.proxy(self))
event.register(cb)
def callback(self):
ev.set()
a = A()
print event._registrar
event.emit()
ev.wait(5)
self.assertTrue(ev.isSet())
Line 83: self.log = log
Line 84: self._recovery = True
Line 85: self.channelListener = Listener(self.log)
Line 86: self._generationID = str(uuid.uuid4())
--
To view, visit
http://gerrit.ovirt.org/35436
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: Ib06967b26fc9ace41e5f8305a8fadafbbb0fc4e4
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Adam Litke <alitke(a)redhat.com>
Gerrit-Reviewer: Adam Litke <alitke(a)redhat.com>
Gerrit-Reviewer: Dan Kenigsberg <danken(a)redhat.com>
Gerrit-Reviewer: Federico Simoncelli <fsimonce(a)redhat.com>
Gerrit-Reviewer: Francesco Romani <fromani(a)redhat.com>
Gerrit-Reviewer: Nir Soffer <nsoffer(a)redhat.com>
Gerrit-Reviewer: automation(a)ovirt.org
Gerrit-Reviewer: oVirt Jenkins CI Server
Gerrit-HasComments: Yes