[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.3] libxl: event handling: Break out ao_work_outstanding
commit 546960ca0572d99edff03fd1eb1436c71ff24d6d Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> AuthorDate: Mon Feb 9 15:18:30 2015 +0000 Commit: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CommitDate: Wed Aug 12 12:25:13 2015 +0100 libxl: event handling: Break out ao_work_outstanding Break out the test in libxl__ao_complete_check_progress_reports, into ao_work_outstanding, which reports false if either (i) the ao is still ongoing or (ii) there is a progress report (perhaps on a different thread's callback queue) which has yet to be reported to the application. No functional change. Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Ian Campbell <ian.campbell@xxxxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> CC: Jim Fehlig <jfehlig@xxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> (cherry picked from commit 93699882d98cce9736d6e871db303275df1138a2) (cherry picked from commit ba683105b52f60e312151654d72b0b0e8508cee5) --- tools/libxl/libxl_event.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/libxl/libxl_event.c b/tools/libxl/libxl_event.c index e42b371..85465e8 100644 --- a/tools/libxl/libxl_event.c +++ b/tools/libxl/libxl_event.c @@ -1575,19 +1575,25 @@ void libxl__ao_complete(libxl__egc *egc, libxl__ao *ao, int rc) libxl__ao_complete_check_progress_reports(egc, ao); } -void libxl__ao_complete_check_progress_reports(libxl__egc *egc, libxl__ao *ao) +static bool ao_work_outstanding(libxl__ao *ao) { /* * We don't consider an ao complete if it has any outstanding * callbacks. These callbacks might be outstanding on other * threads, queued up in the other threads' egc's. Those threads * will, after making the callback, take out the lock again, - * decrement progress_reports_outstanding, and call us again. + * decrement progress_reports_outstanding, and call + * libxl__ao_complete_check_progress_reports. */ + return !ao->complete || ao->progress_reports_outstanding; +} + +void libxl__ao_complete_check_progress_reports(libxl__egc *egc, libxl__ao *ao) +{ libxl_ctx *ctx = libxl__gc_owner(&egc->gc); assert(ao->progress_reports_outstanding >= 0); - if (!ao->complete || ao->progress_reports_outstanding) + if (ao_work_outstanding(ao)) return; if (ao->poller) { -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.3 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |