diff options
author | Andrew Tridgell <tridge@samba.org> | 2006-04-05 04:50:08 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:00:16 -0500 |
commit | a9cb173f7674d311624c34205f1417b31972d1f2 (patch) | |
tree | cab8b6377df9081a03d8805e48ba184fd9b84bf0 /source4/ntvfs/common | |
parent | 66a0d692564e5392588247696e2156b85252cbea (diff) | |
download | samba-a9cb173f7674d311624c34205f1417b31972d1f2.tar.gz samba-a9cb173f7674d311624c34205f1417b31972d1f2.tar.bz2 samba-a9cb173f7674d311624c34205f1417b31972d1f2.zip |
r14918: cleaner handling of systems without inotify
(This used to be commit cf17ff15b15942f0ce068dd0a94b3b565a9b93cb)
Diffstat (limited to 'source4/ntvfs/common')
-rw-r--r-- | source4/ntvfs/common/notify.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/source4/ntvfs/common/notify.c b/source4/ntvfs/common/notify.c index 595a0f6566..9ea024f2fc 100644 --- a/source4/ntvfs/common/notify.c +++ b/source4/ntvfs/common/notify.c @@ -268,6 +268,25 @@ static void sys_notify_callback(struct sys_notify_context *ctx, } /* + 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,33 +331,23 @@ NTSTATUS notify_add(struct notify_context *notify, struct notify_entry *e, 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_save(notify); - - notify_unlock(notify); - - NT_STATUS_NOT_OK_RETURN(status); } - if (path) { - talloc_free(path); - } + status = notify_add_array(notify, e, path, private); + +done: + notify_unlock(notify); + talloc_free(path); return status; } |