$OpenBSD: patch-src_libtracker-miner_tracker-monitor_c,v 1.7 2012/04/11 07:39:37 ajacoutot Exp $

Recognize the gio-kqueue monitoring backend.
(not to be pushed upstream before the glib changes are there first)

--- src/libtracker-miner/tracker-monitor.c.orig	Mon Jan  2 23:34:02 2012
+++ src/libtracker-miner/tracker-monitor.c	Wed Apr 11 08:54:38 2012
@@ -23,6 +23,13 @@
 #include <string.h>
 #include <gio/gio.h>
 
+/* getrlimit(2) */
+#if defined (__OpenBSD__)
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
 #include "tracker-monitor.h"
 #include "tracker-marshal.h"
 
@@ -224,6 +231,9 @@ tracker_monitor_init (TrackerMonitor *object)
 	const gchar           *name;
 	GError                *error = NULL;
 
+#if defined (__OpenBSD__)
+	struct rlimit rl;
+#endif
 	object->priv = TRACKER_MONITOR_GET_PRIVATE (object);
 
 	priv = object->priv;
@@ -296,6 +306,22 @@ tracker_monitor_init (TrackerMonitor *object)
 			 */
 			priv->monitor_limit = MAX (priv->monitor_limit, 0);
 		}
+#if defined (__OpenBSD__)
+		else if (strcmp (name, "GKqueueDirectoryMonitor") == 0) {
+			/* Using kqueue(2) */
+			g_message ("Monitor backend is kqueue(2)");
+			if (getrlimit (RLIMIT_NOFILE, &rl) == 0) {
+				priv->monitor_limit = (rl.rlim_cur*90)/100;
+			} else {
+				priv->monitor_limit = 400;
+			}
+			/*  Prevent from opening an insame amount of FDs
+			 *  (kqueue(2) opens one file descriptor per monitor).
+			 */
+			if (priv->monitor_limit > 2048)
+				priv->monitor_limit = 2048;
+		}
+#endif
 		else if (strcmp (name, "GFamDirectoryMonitor") == 0) {
 			/* Using Fam */
 			g_message ("Monitor backend is Fam");
