summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ctdb/client/client.h6
-rw-r--r--ctdb/client/client_message.c20
2 files changed, 18 insertions, 8 deletions
diff --git a/ctdb/client/client.h b/ctdb/client/client.h
index 82d543a2f6b..df0b9b8bee7 100644
--- a/ctdb/client/client.h
+++ b/ctdb/client/client.h
@@ -100,14 +100,12 @@ struct tevent_req *ctdb_client_remove_message_handler_send(
bool ctdb_client_remove_message_handler_recv(struct tevent_req *req,
int *perr);
-int ctdb_client_set_message_handler(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
+int ctdb_client_set_message_handler(struct tevent_context *ev,
struct ctdb_client_context *client,
uint64_t srvid, srvid_handler_fn handler,
void *private_data);
-int ctdb_client_remove_message_handler(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
+int ctdb_client_remove_message_handler(struct tevent_context *ev,
struct ctdb_client_context *client,
uint64_t srvid, void *private_data);
diff --git a/ctdb/client/client_message.c b/ctdb/client/client_message.c
index c316f42ff33..d5338420cd4 100644
--- a/ctdb/client/client_message.c
+++ b/ctdb/client/client_message.c
@@ -371,16 +371,22 @@ bool ctdb_client_remove_message_handler_recv(struct tevent_req *req, int *perr)
return true;
}
-int ctdb_client_set_message_handler(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
+int ctdb_client_set_message_handler(struct tevent_context *ev,
struct ctdb_client_context *client,
uint64_t srvid, srvid_handler_fn handler,
void *private_data)
{
+ TALLOC_CTX *mem_ctx;
int ret;
+ mem_ctx = talloc_new(client);
+ if (mem_ctx == NULL) {
+ return ENOMEM;
+ }
+
ret = ctdb_ctrl_register_srvid(mem_ctx, ev, client, client->pnn,
tevent_timeval_zero(), srvid);
+ talloc_free(mem_ctx);
if (ret != 0) {
return ret;
}
@@ -389,15 +395,21 @@ int ctdb_client_set_message_handler(TALLOC_CTX *mem_ctx,
handler, private_data);
}
-int ctdb_client_remove_message_handler(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
+int ctdb_client_remove_message_handler(struct tevent_context *ev,
struct ctdb_client_context *client,
uint64_t srvid, void *private_data)
{
+ TALLOC_CTX *mem_ctx;
int ret;
+ mem_ctx = talloc_new(client);
+ if (mem_ctx == NULL) {
+ return ENOMEM;
+ }
+
ret = ctdb_ctrl_deregister_srvid(mem_ctx, ev, client, client->pnn,
tevent_timeval_zero(), srvid);
+ talloc_free(mem_ctx);
if (ret != 0) {
return ret;
}