summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/files.c6
-rw-r--r--source3/smbd/globals.h1
-rw-r--r--source3/smbd/notify.c7
-rw-r--r--source3/smbd/service.c9
4 files changed, 14 insertions, 9 deletions
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 10a0b8169d..6499a810ff 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -447,11 +447,13 @@ void file_free(struct smb_request *req, files_struct *fsp)
}
if (fsp->notify) {
+ struct notify_context *notify_ctx =
+ fsp->conn->sconn->notify_ctx;
if (fsp->is_directory) {
- notify_remove_onelevel(fsp->conn->notify_ctx,
+ notify_remove_onelevel(notify_ctx,
&fsp->file_id, fsp);
}
- notify_remove(fsp->conn->notify_ctx, fsp);
+ notify_remove(notify_ctx, fsp);
TALLOC_FREE(fsp->notify);
}
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index caf7357df4..3973855b7e 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -449,6 +449,7 @@ struct smbd_server_connection {
const char *remote_hostname;
struct tevent_context *ev_ctx;
struct messaging_context *msg_ctx;
+ struct notify_context *notify_ctx;
struct {
bool got_session;
} nbt;
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index 88e838ee17..8228c7597e 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -221,7 +221,7 @@ NTSTATUS change_notify_create(struct files_struct *fsp, uint32 filter,
e.subdir_filter = filter;
}
- status = notify_add(fsp->conn->notify_ctx, fsp->conn, &e,
+ status = notify_add(fsp->conn->sconn->notify_ctx, fsp->conn, &e,
notify_callback, fsp);
TALLOC_FREE(fullpath);
@@ -364,6 +364,7 @@ void remove_pending_change_notify_requests_by_fid(files_struct *fsp,
void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
const char *path)
{
+ struct notify_context *notify_ctx = conn->sconn->notify_ctx;
char *fullpath;
char *parent;
const char *name;
@@ -378,7 +379,7 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
smb_fname_parent.base_name = parent;
if (SMB_VFS_STAT(conn, &smb_fname_parent) != -1) {
- notify_onelevel(conn->notify_ctx, action, filter,
+ notify_onelevel(notify_ctx, action, filter,
SMB_VFS_FILE_ID_CREATE(conn, &smb_fname_parent.st),
name);
}
@@ -390,7 +391,7 @@ void notify_fname(connection_struct *conn, uint32 action, uint32 filter,
DEBUG(0, ("asprintf failed\n"));
return;
}
- notify_trigger(conn->notify_ctx, action, filter, fullpath);
+ notify_trigger(notify_ctx, action, filter, fullpath);
TALLOC_FREE(fullpath);
}
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 79e935d5d2..d28a51a9a7 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -698,10 +698,11 @@ static NTSTATUS make_connection_snum(struct smbd_server_connection *sconn,
on_err_call_dis_hook = true;
if ((!conn->printer) && (!conn->ipc) &&
- lp_change_notify(conn->params)) {
- conn->notify_ctx = notify_init(conn,
- sconn->msg_ctx,
- sconn->ev_ctx);
+ lp_change_notify(conn->params) &&
+ sconn->notify_ctx == NULL) {
+ sconn->notify_ctx = notify_init(sconn,
+ sconn->msg_ctx,
+ sconn->ev_ctx);
}
/*