svn commit: samba r14918 - in branches/SAMBA_4_0/source/ntvfs: common sysdep

tridge at samba.org tridge at samba.org
Wed Apr 5 04:50:08 GMT 2006


Author: tridge
Date: 2006-04-05 04:50:08 +0000 (Wed, 05 Apr 2006)
New Revision: 14918

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14918

Log:

cleaner handling of systems without inotify

Modified:
   branches/SAMBA_4_0/source/ntvfs/common/notify.c
   branches/SAMBA_4_0/source/ntvfs/sysdep/inotify.c
   branches/SAMBA_4_0/source/ntvfs/sysdep/sys_notify.c


Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/common/notify.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/common/notify.c	2006-04-05 04:44:13 UTC (rev 14917)
+++ branches/SAMBA_4_0/source/ntvfs/common/notify.c	2006-04-05 04:50:08 UTC (rev 14918)
@@ -268,6 +268,25 @@
 }
 
 /*
+  add an entry to the notify array
+*/
+static NTSTATUS notify_add_array(struct notify_context *notify, struct notify_entry *e,
+				 const char *path, void *private)
+{
+	notify->array->entries[notify->array->num_entries] = *e;
+	notify->array->entries[notify->array->num_entries].private = private;
+	notify->array->entries[notify->array->num_entries].server = notify->server;
+	
+	if (path) {
+		notify->array->entries[notify->array->num_entries].path = path;
+	}
+
+	notify->array->num_entries++;
+	
+	return notify_save(notify);
+}
+
+/*
   add a notify watch. This is called when a notify is first setup on a open
   directory handle.
 */
@@ -312,34 +331,24 @@
 	DLIST_ADD(notify->list, listel);
 
 	/* ignore failures from sys_notify */
-	status = sys_notify_watch(notify->sys_notify_ctx, e->path, e->filter, 
-				  sys_notify_callback, listel, 
-				  &listel->sys_notify_handle);
-	if (NT_STATUS_IS_OK(status)) {
-		talloc_steal(listel, listel->sys_notify_handle);
-		notify_unlock(notify);
-	} else {
-		notify->array->entries[notify->array->num_entries] = *e;
-		notify->array->entries[notify->array->num_entries].private = private;
-		notify->array->entries[notify->array->num_entries].server = notify->server;
-
-		if (path) {
-			notify->array->entries[notify->array->num_entries].path = path;
+	if (notify->sys_notify_ctx != NULL) {
+		status = sys_notify_watch(notify->sys_notify_ctx, e->path, e->filter, 
+					  sys_notify_callback, listel, 
+					  &listel->sys_notify_handle);
+		if (NT_STATUS_IS_OK(status)) {
+			/* if the kernel handler has said it can handle this notify then
+			   we don't need to add it to the array */
+			talloc_steal(listel, listel->sys_notify_handle);
+			goto done;
 		}
+	}
 
-		notify->array->num_entries++;
+	status = notify_add_array(notify, e, path, private);
 
-		status = notify_save(notify);
+done:
+	notify_unlock(notify);
+	talloc_free(path);
 
-		notify_unlock(notify);
-
-		NT_STATUS_NOT_OK_RETURN(status);
-	}
-
-	if (path) {
-		talloc_free(path);
-	}
-
 	return status;
 }
 

Modified: branches/SAMBA_4_0/source/ntvfs/sysdep/inotify.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/sysdep/inotify.c	2006-04-05 04:44:13 UTC (rev 14917)
+++ branches/SAMBA_4_0/source/ntvfs/sysdep/inotify.c	2006-04-05 04:50:08 UTC (rev 14918)
@@ -239,7 +239,7 @@
 
 /*
   add a watch. The watch is removed when the caller calls
-  talloc_free() on handle
+  talloc_free() on *handle
 */
 static NTSTATUS inotify_watch(struct sys_notify_context *ctx, const char *dirpath,
 			      uint32_t filter, sys_notify_callback_t callback,

Modified: branches/SAMBA_4_0/source/ntvfs/sysdep/sys_notify.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/sysdep/sys_notify.c	2006-04-05 04:44:13 UTC (rev 14917)
+++ branches/SAMBA_4_0/source/ntvfs/sysdep/sys_notify.c	2006-04-05 04:50:08 UTC (rev 14918)
@@ -44,6 +44,10 @@
 	const char *bname;
 	struct sys_notify_backend *b;
 
+	if (backends == NULL) {
+		return NULL;
+	}
+
 	if (ev == NULL) {
 		ev = event_context_find(mem_ctx);
 	}



More information about the samba-cvs mailing list