head	1.3;
access;
symbols
	RELEASE_8_3_0:1.3
	RELEASE_9_0_0:1.3
	RELEASE_7_4_0:1.3
	RELEASE_8_2_0:1.3
	RELEASE_6_EOL:1.3
	RELEASE_8_1_0:1.3
	RELEASE_7_3_0:1.3
	RELEASE_8_0_0:1.3
	RELEASE_7_2_0:1.3
	RELEASE_7_1_0:1.3
	RELEASE_6_4_0:1.3
	RELEASE_5_EOL:1.3
	RELEASE_7_0_0:1.3
	RELEASE_6_3_0:1.3
	PRE_XORG_7:1.3
	RELEASE_4_EOL:1.3
	RELEASE_6_2_0:1.3
	RELEASE_6_1_0:1.3
	RELEASE_5_5_0:1.3
	RELEASE_6_0_0:1.3
	RELEASE_5_4_0:1.3
	RELEASE_4_11_0:1.3
	RELEASE_5_3_0:1.3
	RELEASE_4_10_0:1.3
	RELEASE_5_2_1:1.3
	RELEASE_5_2_0:1.3
	RELEASE_4_9_0:1.3
	RELEASE_5_1_0:1.3
	RELEASE_4_8_0:1.3
	RELEASE_5_0_0:1.3
	RELEASE_4_7_0:1.3
	RELEASE_4_6_2:1.3
	RELEASE_4_6_1:1.3
	RELEASE_4_6_0:1.3
	RELEASE_5_0_DP1:1.3
	RELEASE_4_5_0:1.3
	RELEASE_4_4_0:1.3
	RELEASE_4_3_0:1.3
	RELEASE_4_2_0:1.3
	RELEASE_4_1_1:1.3
	RELEASE_4_1_0:1.3
	RELEASE_3_5_0:1.2;
locks; strict;
comment	@# @;


1.3
date	2000.07.18.21.53.39;	author jlemon;	state Exp;
branches;
next	1.2;

1.2
date	2000.05.26.19.01.09;	author kris;	state Exp;
branches;
next	1.1;

1.1
date	2000.04.25.08.04.54;	author kris;	state Exp;
branches;
next	;


desc
@@


1.3
log
@Change patch to reflect new kqueue API

Approved by:	kris
@
text
@--- check_tmp.c.orig	Fri Sep 24 15:33:35 1999
+++ check_tmp.c	Tue Jul 18 16:18:59 2000
@@@@ -37,7 +37,13 @@@@
   char error_buffer[256];
 #endif
 #endif
-  
+
+#if (__FreeBSD_version >= 500011) || (__FreeBSD_version >= 410000 && __FreeBSD_version < 500000)
+  struct kevent ev;
+  int fd;
+  struct timespec ts = { 0, 0 };
+  int kq = -1;
+#endif
 
   struct listStruct *list = NULL;
 
@@@@ -178,6 +184,21 @@@@
     exit(1);
   }
 
+#if (__FreeBSD_version >= 500011) || (__FreeBSD_version >= 410000 && __FreeBSD_version < 500000)
+  /* Set up the KQ on the target directory */
+  fd = dirfd(dirp);
+
+  kq = kqueue();
+  if (kq < 0)
+    err(1, "kqueue");
+
+  ev.ident = fd;
+  ev.filter = EVFILT_VNODE;
+  ev.flags = EV_ADD | EV_ENABLE | EV_CLEAR;
+  ev.fflags = NOTE_WRITE;
+  kevent(kq, &ev, 1, NULL, 0, &ts);
+#endif
+
   /* steup the first element of the list */
   while ((dp = readdir(dirp)) != NULL){
     if (!list) /* first time */
@@@@ -266,6 +287,10 @@@@
   rewinddir(dirp);
 
   while (1){
+
+#if (__FreeBSD_version >= 500011) || (__FreeBSD_version >= 410000 && __FreeBSD_version < 500000)
+    if (ev.fflags & NOTE_WRITE) {
+#endif
     while ((dp = readdir(dirp)) != NULL){
       if (!(checknode(list, watchdir, dp->d_name))){
         if (replacewatchflag){
@@@@ -352,11 +377,22 @@@@
       /* closedir(dirp); */
       }
     }
-#ifdef 0
+#if 0
     walklist(list);
 #endif
     list = prunelist(list); 
     rewinddir(dirp);
+
+#if (__FreeBSD_version >= 500011) || (__FreeBSD_version >= 410000 && __FreeBSD_version < 500000)
+    /* Reset event so we don't trigger on the rewinddir */
+    kevent(kq, &ev, 1, NULL, 0, &ts);
+
+    /* Block until the directory changes */
+    if (kevent(kq, NULL, 0, &ev, 1, NULL) < 0)
+      err(1, "kevent");
+
+  }
+#endif
   }
 /*   closedir(dirp); */
 
@


1.2
log
@Add kqueue() support for recent versions of -stable as well now that
they have it.
@
text
@d1 3
a3 3
--- check_tmp.c.orig	Fri Sep 24 13:33:35 1999
+++ check_tmp.c	Mon May 22 23:49:21 2000
@@@@ -37,7 +37,14 @@@@
d9 1
a9 1
+#if (__FreeBSD_version >= 500001) || (__FreeBSD_version >= 400019 && __FreeBSD_version < 500000)
a10 1
+  struct kevent *evp;
d18 1
a18 1
@@@@ -178,6 +185,22 @@@@
d22 1
a22 1
+#if (__FreeBSD_version >= 500001) || (__FreeBSD_version >= 400019 && __FreeBSD_version < 500000)
d34 1
a34 2
+  evp = &ev;
+  kevent(kq, 1, &evp, 0, NULL, &ts);
d40 1
a40 1
@@@@ -266,6 +289,10 @@@@
d45 1
a45 1
+#if (__FreeBSD_version >= 500001) || (__FreeBSD_version >= 400019 && __FreeBSD_version < 500000)
d51 1
a51 1
@@@@ -352,11 +379,22 @@@@
d62 1
a62 1
+#if (__FreeBSD_version >= 500001) || (__FreeBSD_version >= 400019 && __FreeBSD_version < 500000)
d64 1
a64 1
+    kevent(kq, 1, &evp, 0, NULL, &ts);
d67 1
a67 1
+    if (kevent(kq, 0, NULL, 1, &ev, NULL) < 0)
@


1.1
log
@On FreeBSD 5.0, use the new kqueue() notification system to monitor
for directory changes. This cuts CPU usage from 100% down to about 0.1%
as well as improving the reliability of change monitoring.
@
text
@d2 3
a4 2
+++ check_tmp.c	Tue Apr 25 00:57:56 2000
@@@@ -38,6 +38,13 @@@@
d7 3
a9 2
   
+#if __FreeBSD_version >= 500001
d23 1
a23 1
+#if __FreeBSD_version >= 500001
d47 1
a47 1
+#if __FreeBSD_version >= 500001
d64 1
a64 1
+#if __FreeBSD_version >= 500001
@

