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) -- 2.43.0
