notify_inotify: inotify_watch now takes a mem_ctx
authorVolker Lendecke <vl@samba.org>
Wed, 5 Nov 2014 12:18:31 +0000 (12:18 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 9 Dec 2014 03:12:09 +0000 (04:12 +0100)
This will make it easier to integrate into proper memory hierarchies.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_default.c
source3/smbd/notify_inotify.c
source3/smbd/proto.h

index eaa1c2be4f45786850c27cf22d9a34c758e9f71d..5634cc0fe96e38565f7afa201a8ea673ff7d9474 100644 (file)
@@ -2123,7 +2123,14 @@ static NTSTATUS vfswrap_notify_watch(vfs_handle_struct *vfs_handle,
                if (!lp_parm_bool(-1, "notify", "inotify", True)) {
                        return NT_STATUS_INVALID_SYSTEM_SERVICE;
                }
-               ret = inotify_watch(ctx, path, filter, subdir_filter,
+               /*
+                * "ctx->private_data" is not obvious as a talloc context
+                * here. Without modifying the VFS we don't have a mem_ctx
+                * available here, and ctx->private_data was used by
+                * inotify_watch before it got a real talloc parent.
+                */
+               ret = inotify_watch(ctx->private_data, ctx,
+                                   path, filter, subdir_filter,
                                    callback, private_data, handle);
                if (ret != 0) {
                        return map_nt_error_from_unix(ret);
index a3c30f1431e7d1bcb79a0f664ac790cb0ff9a129..fedf9b522ffd357eed4b1e8ff37d4e232e18a6bd 100644 (file)
@@ -348,7 +348,8 @@ static int watch_destructor(struct inotify_watch_context *w)
   add a watch. The watch is removed when the caller calls
   talloc_free() on *handle
 */
-int inotify_watch(struct sys_notify_context *ctx,
+int inotify_watch(TALLOC_CTX *mem_ctx,
+                 struct sys_notify_context *ctx,
                  const char *path,
                  uint32_t *filter,
                  uint32_t *subdir_filter,
@@ -385,7 +386,7 @@ int inotify_watch(struct sys_notify_context *ctx,
           watch descriptor for multiple watches on the same path */
        mask |= (IN_MASK_ADD | IN_ONLYDIR);
 
-       w = talloc(in, struct inotify_watch_context);
+       w = talloc(mem_ctx, struct inotify_watch_context);
        if (w == NULL) {
                *filter = orig_filter;
                return ENOMEM;
index 0e43aaf0dfa0b87341f1e4f32aebfc886c5a8924..44ea6f0c7543e68e755b19329f17399e3e584ec1 100644 (file)
@@ -531,7 +531,8 @@ struct sys_notify_context *sys_notify_context_create(TALLOC_CTX *mem_ctx,
 
 /* The following definitions come from smbd/notify_inotify.c  */
 
-int inotify_watch(struct sys_notify_context *ctx,
+int inotify_watch(TALLOC_CTX *mem_ctx,
+                 struct sys_notify_context *ctx,
                  const char *path,
                  uint32_t *filter,
                  uint32_t *subdir_filter,