On 11.09.26 21:08, Vladimir Sementsov-Ogievskiy wrote:
Use initialized in event_notifier_get_fd() and event_notifier_get_wfd()
instead of exposing the descriptor fields of an uninitialized notifier.
This makes a zeroed notifier report the same absent descriptor as one
that has been cleaned up, while preserving fd 0 for initialized notifiers.

Document the accessor contract so callers can test for an absent notifier
without accessing its initialized flag directly.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
---
  include/qemu/event_notifier.h | 1 +
  util/event_notifier-posix.c   | 4 ++--
  2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/include/qemu/event_notifier.h b/include/qemu/event_notifier.h
index 8a4ff308e19..de2e876cb15 100644
--- a/include/qemu/event_notifier.h
+++ b/include/qemu/event_notifier.h
@@ -37,6 +37,7 @@ int event_notifier_test_and_clear(EventNotifier *);
#ifdef CONFIG_POSIX
  void event_notifier_init_fd(EventNotifier *, int fd);
+/* These accessors return -1 for an uninitialized notifier. */
  int event_notifier_get_fd(const EventNotifier *);
  int event_notifier_get_wfd(const EventNotifier *);
  #else
diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c
index 83fdbb96bbc..34a2716dbf2 100644
--- a/util/event_notifier-posix.c
+++ b/util/event_notifier-posix.c
@@ -96,12 +96,12 @@ void event_notifier_cleanup(EventNotifier *e)
int event_notifier_get_fd(const EventNotifier *e)
  {
-    return e->rfd;
+    return e->initialized ? e->rfd : -1;
  }
int event_notifier_get_wfd(const EventNotifier *e)
  {
-    return e->wfd;
+    return e->initialized ? e->wfd : -1;
  }
int event_notifier_set(EventNotifier *e)


Hmm. No, stop. I have better idea. Actually no caller (except of exclusions in 02 
and 03 patches, which we get rid off) expect getting invalid fd. So better is 
assert(e->initialized) in both getters. And add event_notifier_initialized() 
for rare callers which aware of this thing.

--
Best regards,
Vladimir

Reply via email to