From bfff9df5eb4827fed4c56d92c2601327d37df59a Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Sun, 24 Oct 2010 00:49:20 +0000 Subject: [PATCH] As suggested by Ingo use a B_WATCH_VOLUME flag to tell the kernel to watch the whole volume. Kernel part follows. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39106 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/storage/NodeMonitor.h | 5 ++--- headers/private/system/node_monitor_private.h | 14 ++++++++++++++ src/kits/storage/NodeMonitor.cpp | 11 ++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 headers/private/system/node_monitor_private.h diff --git a/headers/os/storage/NodeMonitor.h b/headers/os/storage/NodeMonitor.h index 3abd3b1e52..24cf2878c7 100644 --- a/headers/os/storage/NodeMonitor.h +++ b/headers/os/storage/NodeMonitor.h @@ -83,9 +83,8 @@ class BLooper; class BHandler; -extern status_t watch_volume(const dev_t volume, uint32 flags, - BMessenger target); -extern status_t watch_volume(const dev_t volume, uint32 flags, +extern status_t watch_volume(dev_t volume, uint32 flags, BMessenger target); +extern status_t watch_volume(dev_t volume, uint32 flags, const BHandler *handler, const BLooper *looper = NULL); extern status_t watch_node(const node_ref *node, uint32 flags, diff --git a/headers/private/system/node_monitor_private.h b/headers/private/system/node_monitor_private.h new file mode 100644 index 0000000000..572ef317dd --- /dev/null +++ b/headers/private/system/node_monitor_private.h @@ -0,0 +1,14 @@ +/* + * Copyright 2010, Clemens Zeidler, haiku@clemens-zeidler.de. + * Distributed under the terms of the MIT License. + */ +#ifndef _NODE_MONITOR_PRIVATE_H +#define _NODE_MONITOR_PRIVATE_H + + +enum { + B_WATCH_VOLUME = 0xF000 +}; + + +#endif /* _NODE_MONITOR_PRIVATE_H */ diff --git a/src/kits/storage/NodeMonitor.cpp b/src/kits/storage/NodeMonitor.cpp index b56eefa8aa..b2eaa3805b 100644 --- a/src/kits/storage/NodeMonitor.cpp +++ b/src/kits/storage/NodeMonitor.cpp @@ -15,10 +15,13 @@ #include +#include "node_monitor_private.h" + + // TODO: Tests! -// watch_node +// watch_volume /*! \brief Subscribes a target to watch node changes on a volume. Depending of \a flags the action performed by this function varies: @@ -32,12 +35,14 @@ \return \c B_OK, if everything went fine, another error code otherwise. */ status_t -watch_volume(const dev_t volume, uint32 flags, BMessenger target) +watch_volume(dev_t volume, uint32 flags, BMessenger target) { if ((flags | B_WATCH_NAME) == 0 && (flags | B_WATCH_STAT) && (flags | B_WATCH_ATTR)) return B_BAD_VALUE; + flags |= B_WATCH_VOLUME; + BMessenger::Private messengerPrivate(target); port_id port = messengerPrivate.Port(); int32 token = messengerPrivate.Token(); @@ -46,7 +51,7 @@ watch_volume(const dev_t volume, uint32 flags, BMessenger target) status_t -watch_volume(const dev_t volume, uint32 flags, const BHandler *handler, +watch_volume(dev_t volume, uint32 flags, const BHandler *handler, const BLooper *looper) { return watch_volume(volume, flags, BMessenger(handler, looper));