[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/2] call ao_how callback explicitly
> Bamvor Jian Zhang writes ("[PATCH 2/2] call ao_how callback explicitly"): > > ao_how callback is not called after inserted into list. > > in my test, i directly call it in > > libxl__ao_complete_check_progress_reports. i know it should not > > work like this. Could you give some suggestion about it? > > I'm not sure what you mean. Under what conditions do you not see the > callback happen ? The existing machinery is supposed to take care of > that. Specifically, in the patch you're changing, > libxl__ao_complete_check_progress_reports puts the ao onto > egc->aos_for_callback. On the return path from the libxl event > function back to the application, we are supposed to call > libxl__egc_cleanup, which in turn calls egc_run_callbacks, which > should pick up the aos on aos_for_callback. libxl__egc_cleanup is > called from the event loops in libxl_event_wait and > libxl__ao_inprogress and from the macro EGC_FREE. It should be > impossible for a path to be missed because inside libxl one needs an > egc to call libxl__ao_complete. the libvirt libxl driver register the event handler through libxl_event_register_callbacks, so the libxl_event_wait could not get the event. and if the ao_how is used, the libxl__egc_cleanup in "if ( poller )" statement will not be called either. even if i could expose the libxl_egc_cleanup to libvirt, i still do not know when should i call it? i do not know if there is a event triggered before the ao_how callback should be called. (is there a fd event when the async operation complete?). diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index b732816..c216651 100644 --- a/tools/libxl/libxl_event.c +++ b/tools/libxl/libxl_event.c @@ -1743,6 +1743,13 @@ void libxl__ao_progress_report(libxl__egc *egc, libxl__ao *ao, } } +void libxl_egc_cleanup(libxl_ctx *ctx) +{ + EGC_INIT(ctx); + libxl__egc_cleanup(egc); + EGC_FREE; + return rc; +} /* * Local variables: diff --git a/tools/libxl/libxl_event.h b/tools/libxl/libxl_event.h index 27a65dc..f0f7376 100644 --- a/tools/libxl/libxl_event.h +++ b/tools/libxl/libxl_event.h @@ -555,6 +555,7 @@ int libxl_childproc_reaped(libxl_ctx *ctx, pid_t, int status) */ void libxl_postfork_child_noexec(libxl_ctx *ctx); +void libxl_egc_cleanup(libxl_ctx *ctx); #endif > > What kind of an ao_how is your application passing to libxl ? ao_how with callback set. > Is your > application multithreaded ? yes. > > Ian. > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |