mirror of
https://github.com/samba-team/samba.git
synced 2025-02-28 01:58:17 +03:00
s3: Move the notify_ctx to the smbd_server_connection
We only need one notify_ctx per smbd. The notify_array can become quite large. It's based on absolute paths, so there's no point in having a copy of the complete array in memory multiple times. Autobuild-User: Volker Lendecke <vl@samba.org> Autobuild-Date: Wed Mar 21 14:26:07 CET 2012 on sn-devel-104
This commit is contained in:
parent
7dcc2bf7af
commit
f3fe53668f
@ -427,7 +427,6 @@ typedef struct connection_struct {
|
||||
name_compare_entry *aio_write_behind_list; /* Per-share list of files to use aio write behind on. */
|
||||
struct dfree_cached_info *dfree_info;
|
||||
struct trans_state *pending_trans;
|
||||
struct notify_context *notify_ctx;
|
||||
|
||||
struct rpc_pipe_client *spoolss_pipe;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user