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