diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-05-06 13:34:52 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-05-06 13:34:52 +0100 |
commit | cc489fb3c4f2d523cba4b8b13d2bf83564de8254 (patch) | |
tree | c1c5303e97b6a35ce3693489d27c1dd378593e4e /extras/mini-os/include/xenbus.h | |
parent | ea1c7a7225787dcda405a1a75a1e982624f1ef1a (diff) | |
download | xen-cc489fb3c4f2d523cba4b8b13d2bf83564de8254.tar.gz xen-cc489fb3c4f2d523cba4b8b13d2bf83564de8254.tar.bz2 xen-cc489fb3c4f2d523cba4b8b13d2bf83564de8254.zip |
minios: fix thread safety of xenbus watches by requiring callers to
provide their own queue of events, because else we can not dispatch to
watchers running in parallel.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/include/xenbus.h')
-rw-r--r-- | extras/mini-os/include/xenbus.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/extras/mini-os/include/xenbus.h b/extras/mini-os/include/xenbus.h index 9a44d0b2d6..2ed370f252 100644 --- a/extras/mini-os/include/xenbus.h +++ b/extras/mini-os/include/xenbus.h @@ -19,17 +19,18 @@ struct xenbus_event { char *token; struct xenbus_event *next; }; +typedef struct xenbus_event *xenbus_event_queue; -char *xenbus_watch_path_token(xenbus_transaction_t xbt, const char *path, const char *token, struct xenbus_event *volatile *events); +char *xenbus_watch_path_token(xenbus_transaction_t xbt, const char *path, const char *token, xenbus_event_queue *events); char *xenbus_unwatch_path_token(xenbus_transaction_t xbt, const char *path, const char *token); extern struct wait_queue_head xenbus_watch_queue; -void xenbus_wait_for_watch(void); -char **xenbus_wait_for_watch_return(void); -char* xenbus_wait_for_value(const char *path, const char *value); +void xenbus_wait_for_watch(xenbus_event_queue *queue); +char **xenbus_wait_for_watch_return(xenbus_event_queue *queue); +char* xenbus_wait_for_value(const char *path, const char *value, xenbus_event_queue *queue); /* When no token is provided, use a global queue. */ #define XENBUS_WATCH_PATH_TOKEN "xenbus_watch_path" -extern struct xenbus_event * volatile xenbus_events; +extern xenbus_event_queue xenbus_events; #define xenbus_watch_path(xbt, path) xenbus_watch_path_token(xbt, path, XENBUS_WATCH_PATH_TOKEN, NULL) #define xenbus_unwatch_path(xbt, path) xenbus_unwatch_path_token(xbt, path, XENBUS_WATCH_PATH_TOKEN) |