Hi Ian,

I spotted a possible bug in ao_cancel (libxl_event.c) and wanted to run it 
through you.
In the ao_cancel(), we mark the parent->cancelling = 1 so that subsequence 
cancel calls don't get entertained and mess things up. However, in my view, 
setting this should be after we check for "parent->cancellables".

This is because, if someones invokes libxl_ao_cancel(), while there are no 
cancellables registered, then further calls to libxl_ao_cancel() should not be 
rejected - as the first call actually didn't do anything.
I hope I am making myself clear.

index a5a2762..515e0bd 100644
--- a/tools/libxl/libxl_event.c
+++ b/tools/libxl/libxl_event.c
@@ -2032,8 +2032,6 @@ static int ao__cancel(libxl_ctx *ctx, libxl__ao *parent)
         goto out;
     }

-    parent->cancelling = 1;
-
     if (LIBXL_LIST_EMPTY(&parent->cancellables)) {
         LIBXL__LOG(ctx, XTL_DEBUG,
                    "ao %p: cancellation requested, but not not implemented",
@@ -2042,6 +2040,8 @@ static int ao__cancel(libxl_ctx *ctx, libxl__ao *parent)
         goto out;
     }

+    parent->cancelling = 1;
+
     /* We keep calling cancellation hooks until there are none left */
     while (!LIBXL_LIST_EMPTY(&parent->cancellables)) {
         libxl__egc egc;

Regards,
Koushik Chakravarty
https://gotomeet.me/koushikchakravarty

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to