[libvirt] [PATCH] Fix SEGV on exit after domainEventDeregister()

Philipp Hahn hahn at univention.de
Tue Jul 13 08:54:26 UTC 2010


When the last callback is removed using domainEventDeregister(), the
events dispatcher is deregistered from the C-library, but
domainEventsCallbacks is still an empty list.
On shutdown __del__() deregisters the dispatacher again, which SEGVs

	# You need the event-loop implementation from the Python examples;
	# give the file a name which is importable by Python.
	ln examples/domain-events/events-python/event-test.py eloop.py
	python -c 'from eloop import *
	import sys

	def dump(*args): print " ".join(map(str, args))

	virEventLoopPureStart()
	c = libvirt.open("xen:///")
	c.domainEventRegister(dump, None)
	c.domainEventDeregister(dump)
	sys.exit(0)'

domainEventDeregister() needs to delete domainEventCallbacks so subsequent
calls to __del__() and domainEventRegister() choose the right code paths.
Setting it to None is not enough, since calling domainEventRegiser() again
would trigger an TypeError.

Signed-off-by: Philipp Hahn <hahn at univention.de>
---
 python/libvirt-override-virConnect.py |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: aa89a5c745d0500b2ee3db12832f95f6541550a8.diff
Type: text/x-patch
Size: 957 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20100713/381339aa/attachment-0001.bin>


More information about the libvir-list mailing list