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:
parent
2779cae823
commit
d446e406db
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user