diff options
Diffstat (limited to 'source4/lib/messaging')
-rw-r--r-- | source4/lib/messaging/irpc.h | 1 | ||||
-rw-r--r-- | source4/lib/messaging/messaging.c | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/source4/lib/messaging/irpc.h b/source4/lib/messaging/irpc.h index 4b497959ee..2a76461954 100644 --- a/source4/lib/messaging/irpc.h +++ b/source4/lib/messaging/irpc.h @@ -35,6 +35,7 @@ struct irpc_message { struct irpc_header header; struct ndr_pull *ndr; bool defer_reply; + bool no_reply; struct messaging_context *msg_ctx; struct irpc_list *irpc; void *data; diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c index ae3f908060..c33db825fc 100644 --- a/source4/lib/messaging/messaging.c +++ b/source4/lib/messaging/messaging.c @@ -776,6 +776,7 @@ static void irpc_handler_request(struct messaging_context *msg_ctx, /* make the call */ m->private_data= i->private_data; m->defer_reply = false; + m->no_reply = false; m->msg_ctx = msg_ctx; m->irpc = i; m->data = r; @@ -783,6 +784,12 @@ static void irpc_handler_request(struct messaging_context *msg_ctx, m->header.status = i->fn(m, r); + if (m->no_reply) { + /* the server function won't ever be replying to this request */ + talloc_free(m); + return; + } + if (m->defer_reply) { /* the server function has asked to defer the reply to later */ talloc_steal(msg_ctx, m); |