提交 7c99cb93 编写于 作者: D Daniel P. Berrange

Fix python domain events example & binding

上级 fb828ed2
Thu May 28 12:00:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
Fix python domain events example & binding.
* examples/domain-events/events-python/event-test.py: Fix
broken handling of timers
* python/libvir.c: Take reference on virDomainPtr object
before wrapping it to avoid double-free.
Tue May 26 13:09:30 BST 2009 Daniel P. Berrange <berrange@redhat.com> Tue May 26 13:09:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
Fix error location logging Fix error location logging
......
...@@ -6,6 +6,8 @@ import select ...@@ -6,6 +6,8 @@ import select
mypoll = select.poll() mypoll = select.poll()
TIMEOUT_MS = 1000 TIMEOUT_MS = 1000
debug = False
# handle globals # handle globals
h_fd = 0 h_fd = 0
h_events = 0 h_events = 0
...@@ -66,8 +68,9 @@ def myPollEventToEventHandleType(events): ...@@ -66,8 +68,9 @@ def myPollEventToEventHandleType(events):
return ret; return ret;
def myAddHandle(fd, events, cb, opaque): def myAddHandle(fd, events, cb, opaque):
global h_fd, h_events, h_cb, h_opaque global h_fd, h_events, h_cb, h_opaque, debug
#print "Adding Handle %s %s %s %s" % (str(fd), str(events), str(cb), str(opaque)) if debug:
print "Adding Handle %s %s %s %s" % (str(fd), str(events), str(cb), str(opaque))
h_fd = fd h_fd = fd
h_events = events h_events = events
h_cb = cb h_cb = cb
...@@ -76,36 +79,48 @@ def myAddHandle(fd, events, cb, opaque): ...@@ -76,36 +79,48 @@ def myAddHandle(fd, events, cb, opaque):
return 0 return 0
def myUpdateHandle(watch, event): def myUpdateHandle(watch, event):
global h_fd, h_events global h_fd, h_events, debug
#print "Updating Handle %s %s" % (str(h_fd), str(event)) if debug:
print "Updating Handle %s %s" % (str(h_fd), str(event))
h_events = event h_events = event
mypoll.unregister(h_fd) mypoll.unregister(h_fd)
mypoll.register(h_fd, myEventHandleTypeToPollEvent(event)) mypoll.register(h_fd, myEventHandleTypeToPollEvent(event))
def myRemoveHandle(watch): def myRemoveHandle(watch):
global h_fd global h_fd, debug
#print "Removing Handle %s" % str(h_fd) if debug:
print "Removing Handle %s" % str(h_fd)
mypoll.unregister(h_fd) mypoll.unregister(h_fd)
h_fd = 0 h_fd = 0
return h_opaque return h_opaque
def myAddTimeout(timeout, cb, opaque): def myAddTimeout(timeout, cb, opaque):
global t_active, t_timeout, t_cb, t_opaque global t_active, t_timeout, t_cb, t_opaque, debug
#print "Adding Timeout %s %s %s" % (str(timeout), str(cb), str(opaque)) if debug:
t_active = 1; print "Adding Timeout %s %s %s" % (str(timeout), str(cb), str(opaque))
if timeout == -1:
t_active = 0
else:
t_active = 1
t_timeout = timeout; t_timeout = timeout;
t_cb = cb; t_cb = cb;
t_opaque = opaque; t_opaque = opaque;
return 0 return 0
def myUpdateTimeout(timer, timeout): def myUpdateTimeout(timer, timeout):
global t_timeout global t_timeout, t_active, debug
#print "Updating Timeout %s %s" % (str(timer), str(timeout)) if debug:
print "Updating Timeout %s %s" % (str(timer), str(timeout))
if timeout == -1:
t_active = 0
else:
t_active = 1
t_timeout = timeout; t_timeout = timeout;
def myRemoveTimeout(timer): def myRemoveTimeout(timer):
global t_active global t_active, debug
#print "Removing Timeout %s" % str(timer) if debug:
print "Removing Timeout %s" % str(timer)
t_active = 0; t_active = 0;
return t_opaque return t_opaque
...@@ -159,6 +174,8 @@ def main(): ...@@ -159,6 +174,8 @@ def main():
while 1: while 1:
try: try:
if debug:
print "Poll sleep %d" % t_active
sts = mypoll.poll(TIMEOUT_MS) sts = mypoll.poll(TIMEOUT_MS)
except select.error, err: except select.error, err:
if err[0] == errno.EINTR: if err[0] == errno.EINTR:
...@@ -168,17 +185,19 @@ def main(): ...@@ -168,17 +185,19 @@ def main():
print "Keyboard Interrupt caught - exiting cleanly" print "Keyboard Interrupt caught - exiting cleanly"
break break
if t_cb and t_active == 1:
if debug:
print "Invoking Timeout CB"
t_cb(t_timeout, t_opaque[0], t_opaque[1])
if not sts: if not sts:
#print "Timed out" if debug:
print "Timed out"
continue continue
rfd = sts[0][0] rfd = sts[0][0]
revents = sts[0][1] revents = sts[0][1]
if t_active:
#print "Invoking Timeout CB"
t_cb(t_timeout, t_opaque[0], t_opaque[1])
if revents & select.POLLHUP: if revents & select.POLLHUP:
print "Reset by peer"; print "Reset by peer";
return -1; return -1;
......
...@@ -1653,6 +1653,7 @@ libvirt_virConnectDomainEventCallback(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -1653,6 +1653,7 @@ libvirt_virConnectDomainEventCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
LIBVIRT_ENSURE_THREAD_STATE; LIBVIRT_ENSURE_THREAD_STATE;
/* Create a python instance of this virDomainPtr */ /* Create a python instance of this virDomainPtr */
virDomainRef(dom);
pyobj_dom = libvirt_virDomainPtrWrap(dom); pyobj_dom = libvirt_virDomainPtrWrap(dom);
pyobj_dom_args = PyTuple_New(2); pyobj_dom_args = PyTuple_New(2);
if(PyTuple_SetItem(pyobj_dom_args, 0, pyobj_conn_inst)!=0) { if(PyTuple_SetItem(pyobj_dom_args, 0, pyobj_conn_inst)!=0) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册