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