summaryrefslogtreecommitdiff
path: root/devel/dbus/files/patch-bus_dir-watch.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/dbus/files/patch-bus_dir-watch.c')
-rw-r--r--devel/dbus/files/patch-bus_dir-watch.c178
1 files changed, 0 insertions, 178 deletions
diff --git a/devel/dbus/files/patch-bus_dir-watch.c b/devel/dbus/files/patch-bus_dir-watch.c
deleted file mode 100644
index c848f1fd9746..000000000000
--- a/devel/dbus/files/patch-bus_dir-watch.c
+++ /dev/null
@@ -1,178 +0,0 @@
---- bus/dir-watch.c.orig Tue Jun 14 22:31:38 2005
-+++ bus/dir-watch.c Tue May 2 12:52:08 2006
-@@ -28,17 +28,25 @@
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
-+#elif defined(DBUS_BUS_ENABLE_KQUEUE_ON_FREEBSD)
-+#include <sys/types.h>
-+#include <sys/event.h>
-+#include <sys/time.h>
-+#include <signal.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include "bus.h"
-+#include <dbus/dbus-watch.h>
- #endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX */
-
- #include <dbus/dbus-internals.h>
- #include "dir-watch.h"
-
-+#define MAX_DIRS_TO_WATCH 128
-
- /* D_NOTIFY is available on Linux 2.4 or greater - the actual SIGIO signal is handled in main.c:signal_handler() */
- #ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX
-
--#define MAX_DIRS_TO_WATCH 128
--
- /* use a static array to avoid handling OOM */
- static int fds[MAX_DIRS_TO_WATCH];
- static int num_fds = 0;
-@@ -92,6 +100,147 @@ bus_drop_all_directory_watches (void)
- }
- }
-
-+ num_fds = 0;
-+}
-+
-+#elif defined(DBUS_BUS_ENABLE_KQUEUE_ON_FREEBSD)
-+
-+static int kq = -1;
-+static int fds[MAX_DIRS_TO_WATCH];
-+static int num_fds = 0;
-+static DBusWatch *watch = NULL;
-+static DBusLoop *loop = NULL;
-+
-+static dbus_bool_t
-+_kqueue_watch_callback (DBusWatch *watch, unsigned int condition, void *data)
-+{
-+ return dbus_watch_handle (watch, condition);
-+}
-+
-+static dbus_bool_t
-+_handle_kqueue_watch (DBusWatch *watch, unsigned int flags, void *data)
-+{
-+ struct kevent ev;
-+ struct timespec nullts = { 0, 0 };
-+ int res;
-+ pid_t pid;
-+
-+ res = kevent (kq, NULL, 0, &ev, 1, &nullts);
-+
-+ /* Sleep for half a second to avoid a race when files are install(1)'d
-+ * to system.d. */
-+ usleep(500000);
-+
-+ if (res > 0)
-+ {
-+ pid = getpid ();
-+ _dbus_verbose ("Sending SIGHUP signal on reception of a kevent\n");
-+ (void) kill (pid, SIGHUP);
-+ }
-+ else if (res < 0 && errno == EBADF)
-+ {
-+ kq = -1;
-+ if (watch != NULL)
-+ {
-+ _dbus_loop_remove_watch (loop, watch, _kqueue_watch_callback, NULL);
-+ _dbus_watch_unref (watch);
-+ watch = NULL;
-+ }
-+ pid = getpid ();
-+ _dbus_verbose ("Sending SIGHUP signal since kqueue has been closed\n");
-+ (void) kill (pid, SIGHUP);
-+ }
-+
-+ return TRUE;
-+}
-+
-+void
-+bus_watch_directory (const char *dir, void *userdata)
-+{
-+ int fd;
-+ struct kevent ev;
-+
-+ _dbus_assert (dir != NULL);
-+
-+ if (kq < 0)
-+ {
-+
-+ kq = kqueue ();
-+ if (kq < 0)
-+ {
-+ _dbus_warn ("Cannot create kqueue; error '%s'\n", _dbus_strerror (errno));
-+ goto out;
-+ }
-+
-+ loop = userdata;
-+
-+ watch = _dbus_watch_new (kq, DBUS_WATCH_READABLE, TRUE,
-+ _handle_kqueue_watch, NULL, NULL);
-+
-+ if (watch == NULL)
-+ {
-+ _dbus_warn ("Unable to create kqueue watch\n");
-+ close (kq);
-+ kq = -1;
-+ goto out;
-+ }
-+
-+ if (!_dbus_loop_add_watch (loop, watch, _kqueue_watch_callback,
-+ NULL, NULL))
-+ {
-+ _dbus_warn ("Unable to add reload watch to main loop");
-+ close (kq);
-+ kq = -1;
-+ _dbus_watch_unref (watch);
-+ watch = NULL;
-+ goto out;
-+ }
-+ }
-+
-+ if (num_fds >= MAX_DIRS_TO_WATCH )
-+ {
-+ _dbus_warn ("Cannot watch config directory '%s'. Already watching %d directories\n", dir, MAX_DIRS_TO_WATCH);
-+ goto out;
-+ }
-+
-+ fd = open (dir, O_RDONLY);
-+ if (fd < 0)
-+ {
-+ _dbus_warn ("Cannot open directory '%s'; error '%s'\n", dir, _dbus_strerror (errno));
-+ goto out;
-+ }
-+
-+ EV_SET (&ev, fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR,
-+ NOTE_DELETE | NOTE_EXTEND | NOTE_WRITE | NOTE_RENAME, 0, 0);
-+ if (kevent (kq, &ev, 1, NULL, 0, NULL) == -1)
-+ {
-+ _dbus_warn ("Cannot setup a kevent for '%s'; error '%s'\n", dir, _dbus_strerror (errno));
-+ close (fd);
-+ goto out;
-+ }
-+
-+ fds[num_fds++] = fd;
-+ _dbus_verbose ("Added kqueue watch on config directory '%s'\n", dir);
-+
-+ out:
-+ ;
-+}
-+
-+void
-+bus_drop_all_directory_watches (void)
-+{
-+ int i;
-+
-+ _dbus_verbose ("Dropping all watches on config directories\n");
-+
-+ for (i = 0; i < num_fds; i++)
-+ {
-+ if (close (fds[i]) != 0)
-+ {
-+ _dbus_verbose ("Error closing fd %d for config directory watch\n", fds[i]);
-+ }
-+ }
-+
- num_fds = 0;
- }
-