-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 21.08.2013 12:58, Alexandr пишет: > 21.08.2013 12:39, Daniel P. Berrange пишет: >> On Wed, Aug 21, 2013 at 12:36:06PM +0300, Alexandr wrote: >>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 >>> >>> 21.08.2013 09:46, Alexandr пишет: >>>> 21.08.2013 09:32, Martin Kletzander пишет: >>>>> On Wed 21 Aug 2013 01:03:37 AM CEST, Alexandr wrote: >>>>>> >>>>>> good day. i trying to make callback function for >>>>>> VIR_DOMAIN_EVENT_ID_LIFECYCLE, i have successfully >>>>>> registering callback, but it never called, i need to >>>>>> know when domain started, stopped or crashed, i have >>>>>> write following code >>>>>> >>>>>> static int domain_event_handler(virConnectPtr conn, >>>>>> virDomainPtr dom, int event, int detail, void * opaque) { >>>>>> switch(event) { } return 0; } >>>>>> >>>>>> ..... int callback = >>>>>> virConnectDomainEventRegisterAny(libvirt_connection, >>>>>> NULL, VIR_DOMAIN_EVENT_ID_LIFECYCLE, >>>>>> VIR_DOMAIN_EVENT_CALLBACK(domain_event_handler), NULL, >>>>>> NULL); if(callback == -1) { std::cout<<"Error: failed to >>>>>> register domain event handle callback\n"; return -1; } >>>>>> ..... >>>>>> >>>>>> >>>>>> but "domain_event_handler" is never called, what is >>>>>> wrong here ? >>>> >>>>> Are you running an event loop? You can have a look at our >>>>> examples [1] and see what's being done there. Especially >>>>> note the virEventRunDefaultImpl() [2] there. >>>> >>>>> Martin >>>> >>>>> [1] >>>>> http://libvirt.org/git/?p=libvirt.git;a=blob;f=examples/domain-events/events-c/event-test.c;h=52aa3d08d7326e422c12a8521717c3d55b2d8afd;hb=HEAD >>>> >>>>> >>>> >>>> >>>>> > >>>>> [2] >>>>> http://libvirt.org/git/?p=libvirt.git;a=blob;f=examples/domain-events/events-c/event-test.c;h=52aa3d08d7326e422c12a8521717c3d55b2d8afd;hb=HEAD#l611 >>>> >>>>> >>>> >>>> >>>>> > >>>>> oh..., i missed it, thx for hint and sorry for stupid questions . >>> >>> now it's working except for events from other connections, for >>> example i want to handle domain started by virt-manager, now i >>> do not have event when it's started, is exists any api to >>> handle this events, or i need to implement internal polling of >>> domains state in my application ? > >> The events system reports all lifecycle events, regardless of >> which connection triggered them. > >> If you're not seeing events from domains started by virt-manager >> then your almost certainly connecting to a different libvirt URI >> than virt-manager is using. > >> Daniel > > also looks like i do not receiving last event, i mean last event > what passed to callback is "eventcount - 1" > > _______________________________________________ libvirt-users > mailing list libvirt-users@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvirt-users > after few days of trying i have not resolved problem, and have followinf situation: i receiving events from my connection sometimes (not all and not always), i do not receiving events from other connections (virt-manager) at all (i am sure that connection url are same for both connections), my code follows: static int domain_event_handler(virConnectPtr conn, virDomainPtr dom, int event, int detail, void * opaque) { std::cout<<"domain event handler called\n"; } void libvirt_eventloop_thr_func() { while(true) //TODO: stop somehow on exit { if(virEventRunDefaultImpl() < 0) { virErrorPtr err = virGetLastError(); fprintf(stderr, "Failed to run event loop: %s\n", err && err->message ? err->message : "Unknown error"); } } } .... virSetErrorFunc(NULL, libvirt_error_handler); libvirt_connection = virConnectOpen("qemu:///system"); if(libvirt_connection == NULL) { std::cout<<"failed to connect to qemu:///system\n"; return -1; } std::cout<<"connected to qemu:///system\n"; if (virEventRegisterDefaultImpl() < 0) { virErrorPtr err = virGetLastError(); fprintf(stderr, "Failed to register event implementation: %s\n", err && err->message ? err->message: "Unknown error"); return -1; } { int callback = virConnectDomainEventRegisterAny(libvirt_connection, NULL, VIR_DOMAIN_EVENT_ID_LIFECYCLE, VIR_DOMAIN_EVENT_CALLBACK(domain_event_handler), NULL, NULL); if(callback == -1) { std::cout<<"Error: failed to register domain event handle callback\n"; return -1; } } boost::thread(boost::bind(&libvirt_eventloop_thr_func)); .... am i doing something wrong here ? -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.21 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJSFofkAAoJEH3ap8veG8EHFowH/ipkeTcQZeX6MMaYVazm4kQL IUsnhTuQt/OIVCD7LU3g27ii4T4Y4YeXuMI9p5DrqEjL9TE6jS2ZlZXE29ji48xJ PMpTERz78R/bs0lcffk2pO1MuH8nMDpNT7HI1zdaYZ9vRP9IS4ksGWvw3Jif4lXw o/pLpCTPGQkWJO3ppKo4EVvJbaGi/YyuepOBPFWC2YYD+5zRfFhxZVbfAG1TdilN jMqfrqObeVKIOyCnikGCIwU7XTLY3beTf3g9cgX+Lq03GvS8OpjHDIkd90qX5MNs yt0cJCKX8S4OBv1xsYelXrGulC57YqiQek6o8pQV4qFv2yp8FgRVb4GBNNKsFAE= =5vgP -----END PGP SIGNATURE----- _______________________________________________ libvirt-users mailing list libvirt-users@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvirt-users