1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

smbd: There's only one notify_callback

We do not have different callbacks per notify, put the callback function into
the notify context

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Volker Lendecke 2016-06-14 11:55:13 +02:00 committed by Jeremy Allison
parent 2779cae823
commit d446e406db
5 changed files with 29 additions and 26 deletions

View File

@ -280,8 +280,7 @@ NTSTATUS change_notify_create(struct files_struct *fsp, uint32_t filter,
if ((filter != 0) || (subdir_filter != 0)) {
status = notify_add(fsp->conn->sconn->notify_ctx,
fullpath, filter, subdir_filter,
notify_callback, fsp);
fullpath, filter, subdir_filter, fsp);
}
return status;

View File

@ -32,8 +32,6 @@
struct notify_list {
struct notify_list *next, *prev;
void (*callback)(void *private_data, struct timespec when,
const struct notify_event *ctx);
void *private_data;
};
@ -41,15 +39,19 @@ struct notify_context {
struct server_id notifyd;
struct messaging_context *msg_ctx;
struct notify_list *list;
void (*callback)(void *private_data, struct timespec when,
const struct notify_event *ctx);
};
static void notify_handler(struct messaging_context *msg, void *private_data,
uint32_t msg_type, struct server_id src,
DATA_BLOB *data);
struct notify_context *notify_init(TALLOC_CTX *mem_ctx,
struct messaging_context *msg,
struct tevent_context *ev)
struct notify_context *notify_init(
TALLOC_CTX *mem_ctx, struct messaging_context *msg,
struct tevent_context *ev,
void (*callback)(void *, struct timespec,
const struct notify_event *))
{
struct server_id_db *names_db;
struct notify_context *ctx;
@ -61,6 +63,7 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx,
}
ctx->msg_ctx = msg;
ctx->list = NULL;
ctx->callback = callback;
names_db = messaging_names_db(msg);
if (!server_id_db_lookup_one(names_db, "notify-daemon",
@ -70,12 +73,15 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx,
return NULL;
}
status = messaging_register(msg, ctx, MSG_PVFS_NOTIFY, notify_handler);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("messaging_register failed: %s\n",
nt_errstr(status)));
TALLOC_FREE(ctx);
return NULL;
if (callback != NULL) {
status = messaging_register(msg, ctx, MSG_PVFS_NOTIFY,
notify_handler);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("messaging_register failed: %s\n",
nt_errstr(status)));
TALLOC_FREE(ctx);
return NULL;
}
}
return ctx;
@ -112,8 +118,8 @@ static void notify_handler(struct messaging_context *msg, void *private_data,
for (listel = ctx->list; listel != NULL; listel = listel->next) {
if (listel->private_data == event.private_data) {
listel->callback(listel->private_data, event_msg->when,
&event);
ctx->callback(listel->private_data, event_msg->when,
&event);
break;
}
}
@ -121,8 +127,6 @@ static void notify_handler(struct messaging_context *msg, void *private_data,
NTSTATUS notify_add(struct notify_context *ctx,
const char *path, uint32_t filter, uint32_t subdir_filter,
void (*callback)(void *, struct timespec,
const struct notify_event *),
void *private_data)
{
struct notify_list *listel;
@ -145,7 +149,6 @@ NTSTATUS notify_add(struct notify_context *ctx,
if (listel == NULL) {
return NT_STATUS_NO_MEMORY;
}
listel->callback = callback;
listel->private_data = private_data;
clock_gettime_mono(&msg.instance.creation_time);

View File

@ -583,13 +583,13 @@ int fam_watch(TALLOC_CTX *mem_ctx,
/* The following definitions come from smbd/notify_internal.c */
struct notify_context *notify_init(TALLOC_CTX *mem_ctx,
struct messaging_context *messaging_ctx,
struct tevent_context *ev);
NTSTATUS notify_add(struct notify_context *notify,
struct notify_context *notify_init(
TALLOC_CTX *mem_ctx, struct messaging_context *msg,
struct tevent_context *ev,
void (*callback)(void *, struct timespec,
const struct notify_event *));
NTSTATUS notify_add(struct notify_context *ctx,
const char *path, uint32_t filter, uint32_t subdir_filter,
void (*callback)(void *, struct timespec,
const struct notify_event *),
void *private_data);
NTSTATUS notify_remove(struct notify_context *ctx, void *private_data,
char *path);

View File

@ -528,7 +528,8 @@ static NTSTATUS notify_init_sconn(struct smbd_server_connection *sconn)
return NT_STATUS_OK;
}
sconn->notify_ctx = notify_init(sconn, sconn->msg_ctx, sconn->ev_ctx);
sconn->notify_ctx = notify_init(sconn, sconn->msg_ctx, sconn->ev_ctx,
notify_callback);
if (sconn->notify_ctx == NULL) {
return NT_STATUS_NO_MEMORY;
}

View File

@ -708,7 +708,7 @@ int main(int argc, const char *argv[])
struct notify_context *n;
n = notify_init(talloc_tos(), msg_ctx,
messaging_tevent_context(msg_ctx));
messaging_tevent_context(msg_ctx), NULL);
if (n == NULL) {
goto done;
}