From 51a856e619bf218e64a4cf2e169fccf69b9fae30 Mon Sep 17 00:00:00 2001 From: Albert Chu Date: Sat, 26 Jun 2021 22:20:48 -0700 Subject: [PATCH] libflux: return routes via const in msg API Problem: The functions flux_msg_get_route_first() and flux_msg_get_route_last() return route IDs via an allocated string that must be freed by the user. This API made sense previously when route IDs were stored internally in a zframe. However, now that the route IDs are stored in decoded data structures, we could return the route IDs directly. Solution: Return internally stored route IDs via a const char * instead of an allocated string. Adjust all callers accordingly. use 'const char *' instead of 'char *' in several places where more appropriate. --- src/broker/broker.c | 22 +++++------------- src/broker/log.c | 15 +++++-------- src/broker/module.c | 14 +++++------- src/broker/overlay.c | 8 ++----- src/broker/test/overlay.c | 4 +--- src/cmd/flux-start.c | 6 ++--- src/common/libflux/handle.c | 4 +--- src/common/libflux/message.c | 20 +++++++---------- src/common/libflux/message.h | 12 +++++----- src/common/libflux/test/message.c | 27 ++++++++++------------- src/common/librouter/test/usock_service.c | 3 +-- src/common/libsubprocess/server.c | 11 ++++----- src/common/libterminus/pty.c | 8 +++---- src/common/libterminus/terminus.c | 6 ++--- src/modules/barrier/barrier.c | 10 +++------ src/modules/job-manager/alloc.c | 10 ++++++--- src/modules/kvs/test/kvssync.c | 4 +--- src/modules/kvs/test/waitqueue.c | 4 +--- src/modules/resource/rutil.c | 20 +++++++---------- 19 files changed, 79 insertions(+), 129 deletions(-) diff --git a/src/broker/broker.c b/src/broker/broker.c index ed9773760386..ff97a8ef68c4 100644 --- a/src/broker/broker.c +++ b/src/broker/broker.c @@ -1079,11 +1079,10 @@ static void broker_panic_cb (flux_t *h, flux_msg_handler_t *mh, static void broker_disconnect_cb (flux_t *h, flux_msg_handler_t *mh, const flux_msg_t *msg, void *arg) { - char *sender = NULL; + const char *sender; if (flux_msg_get_route_first (msg, &sender) == 0) { exec_terminate_subprocesses_by_uuid (h, sender); - free (sender); } /* no response */ } @@ -1092,7 +1091,7 @@ static void broker_sub_cb (flux_t *h, flux_msg_handler_t *mh, const flux_msg_t *msg, void *arg) { broker_ctx_t *ctx = arg; - char *uuid = NULL; + const char *uuid; const char *topic; if (flux_request_unpack (msg, NULL, "{ s:s }", "topic", &topic) < 0) @@ -1107,19 +1106,17 @@ static void broker_sub_cb (flux_t *h, flux_msg_handler_t *mh, goto error; if (flux_respond (h, msg, NULL) < 0) flux_log_error (h, "%s: flux_respond", __FUNCTION__); - free (uuid); return; error: if (flux_respond_error (h, msg, errno, NULL) < 0) flux_log_error (h, "%s: flux_respond_error", __FUNCTION__); - free (uuid); } static void broker_unsub_cb (flux_t *h, flux_msg_handler_t *mh, const flux_msg_t *msg, void *arg) { broker_ctx_t *ctx = arg; - char *uuid = NULL; + const char *uuid; const char *topic; if (flux_request_unpack (msg, NULL, "{ s:s }", "topic", &topic) < 0) @@ -1134,12 +1131,10 @@ static void broker_unsub_cb (flux_t *h, flux_msg_handler_t *mh, goto error; if (flux_respond (h, msg, NULL) < 0) flux_log_error (h, "%s: flux_respond", __FUNCTION__); - free (uuid); return; error: if (flux_respond_error (h, msg, errno, NULL) < 0) flux_log_error (h, "%s: flux_respond_error", __FUNCTION__); - free (uuid); } static int route_to_handle (const flux_msg_t *msg, void *arg) @@ -1175,7 +1170,7 @@ static void service_add_cb (flux_t *h, flux_msg_handler_t *w, { broker_ctx_t *ctx = arg; const char *name = NULL; - char *sender = NULL; + const char *sender; module_t *p; struct flux_msg_cred cred; @@ -1194,12 +1189,10 @@ static void service_add_cb (flux_t *h, flux_msg_handler_t *w, goto error; if (flux_respond (h, msg, NULL) < 0) flux_log_error (h, "service_add: flux_respond"); - free (sender); return; error: if (flux_respond_error (h, msg, errno, NULL) < 0) flux_log_error (h, "service_add: flux_respond_error"); - free (sender); } static void service_remove_cb (flux_t *h, flux_msg_handler_t *w, @@ -1208,7 +1201,7 @@ static void service_remove_cb (flux_t *h, flux_msg_handler_t *w, broker_ctx_t *ctx = arg; const char *name; const char *uuid; - char *sender = NULL; + const char *sender; struct flux_msg_cred cred; if (flux_request_unpack (msg, NULL, "{ s:s }", "service", &name) < 0 @@ -1229,12 +1222,10 @@ static void service_remove_cb (flux_t *h, flux_msg_handler_t *w, service_remove (ctx->services, name); if (flux_respond (h, msg, NULL) < 0) flux_log_error (h, "service_remove: flux_respond"); - free (sender); return; error: if (flux_respond_error (h, msg, errno, NULL) < 0) flux_log_error (h, "service_remove: flux_respond_error"); - free (sender); } @@ -1693,7 +1684,7 @@ static void broker_request_sendmsg (broker_ctx_t *ctx, const flux_msg_t *msg) static int broker_response_sendmsg (broker_ctx_t *ctx, const flux_msg_t *msg) { int rc; - char *uuid = NULL; + const char *uuid; if (flux_msg_get_route_last (msg, &uuid) < 0) return -1; @@ -1705,7 +1696,6 @@ static int broker_response_sendmsg (broker_ctx_t *ctx, const flux_msg_t *msg) rc = overlay_sendmsg (ctx->overlay, msg, OVERLAY_DOWNSTREAM); else rc = module_response_sendmsg (ctx->modhash, msg); - ERRNO_SAFE_WRAP (free, uuid); return rc; } diff --git a/src/broker/log.c b/src/broker/log.c index 3fa134151bf1..995bd7dfa9ef 100644 --- a/src/broker/log.c +++ b/src/broker/log.c @@ -596,24 +596,20 @@ static void dmesg_request_cb (flux_t *h, flux_msg_handler_t *mh, static int cmp_sender (const flux_msg_t *msg, const char *uuid) { - char *sender = NULL; - int rc = 0; + const char *sender; if (flux_msg_get_route_first (msg, &sender) < 0) - goto done; + return 0; if (!sender || strcmp (sender, uuid) != 0) - goto done; - rc = 1; -done: - free (sender); - return rc; + return 0; + return 1; } static void disconnect_request_cb (flux_t *h, flux_msg_handler_t *mh, const flux_msg_t *msg, void *arg) { logbuf_t *logbuf = arg; - char *sender = NULL; + const char *sender; const flux_msg_t *msgp; zlist_t *tmp = NULL; @@ -635,7 +631,6 @@ static void disconnect_request_cb (flux_t *h, flux_msg_handler_t *mh, zlist_remove (logbuf->followers, (flux_msg_t *)msgp); } done: - free (sender); zlist_destroy (&tmp); /* no response */ } diff --git a/src/broker/module.c b/src/broker/module.c index c4256606b36d..9bacbab6b512 100644 --- a/src/broker/module.c +++ b/src/broker/module.c @@ -340,26 +340,22 @@ int module_sendmsg (module_t *p, const flux_msg_t *msg) int module_response_sendmsg (modhash_t *mh, const flux_msg_t *msg) { - char *uuid = NULL; - int rc = -1; + const char *uuid; module_t *p; if (!msg) return 0; if (flux_msg_get_route_last (msg, &uuid) < 0) - goto done; + return -1; if (!uuid) { errno = EPROTO; - goto done; + return -1; } if (!(p = zhash_lookup (mh->zh_byuuid, uuid))) { errno = ENOSYS; - goto done; + return -1; } - rc = module_sendmsg (p, msg); -done: - free (uuid); - return rc; + return module_sendmsg (p, msg); } int module_disconnect_arm (module_t *p, diff --git a/src/broker/overlay.c b/src/broker/overlay.c index e91943de40d0..d544a0f359f4 100644 --- a/src/broker/overlay.c +++ b/src/broker/overlay.c @@ -378,7 +378,7 @@ int overlay_sendmsg (struct overlay *ov, int type; uint8_t flags; flux_msg_t *cpy = NULL; - char *uuid = NULL; + const char *uuid; uint32_t nodeid; struct child *child; int rc; @@ -466,13 +466,11 @@ int overlay_sendmsg (struct overlay *ov, default: goto inval; } - free (uuid); flux_msg_decref (cpy); return 0; inval: errno = EINVAL; error: - ERRNO_SAFE_WRAP (free, uuid); flux_msg_decref (cpy); return -1; } @@ -567,7 +565,7 @@ static void child_cb (flux_reactor_t *r, flux_watcher_t *w, flux_msg_t *msg; int type = -1; const char *topic = NULL; - char *sender = NULL; + const char *sender = NULL; struct child *child; int status; @@ -612,7 +610,6 @@ static void child_cb (flux_reactor_t *r, flux_watcher_t *w, } ov->recv_cb (msg, OVERLAY_DOWNSTREAM, ov->recv_arg); handled: - free (sender); flux_msg_decref (msg); return; drop: @@ -623,7 +620,6 @@ static void child_cb (flux_reactor_t *r, flux_watcher_t *w, type != -1 ? flux_msg_typestr (type) : "message", topic ? topic : "-", sender != NULL ? sender : "unknown"); - free (sender); flux_msg_decref (msg); } diff --git a/src/broker/test/overlay.c b/src/broker/test/overlay.c index 1d59dd6fcbd1..b6fba2a23235 100644 --- a/src/broker/test/overlay.c +++ b/src/broker/test/overlay.c @@ -256,7 +256,7 @@ void trio (flux_t *h) zsock_t *zsock_none; zsock_t *zsock_curve; zcert_t *cert; - char *sender; + const char *sender; ctx[0] = ctx_create (h, "trio", size, 0, recv_cb); @@ -313,7 +313,6 @@ void trio (flux_t *h) ok (flux_msg_get_route_first (rmsg, &sender) == 0 && sender != NULL && !strcmp (sender, ctx[1]->uuid), "%s: received message sender is rank 1", ctx[0]->name); - free (sender); /* Send request 0->1 * Side effect: during recvmsg_timeout(), reactor allows hello response @@ -336,7 +335,6 @@ void trio (flux_t *h) ok (flux_msg_get_route_first (rmsg, &sender) == 0 && sender != NULL && !strcmp (sender, ctx[0]->uuid), "%s: request sender is rank 0", ctx[1]->name); - free (sender); /* Response 1->0 */ diff --git a/src/cmd/flux-start.c b/src/cmd/flux-start.c index dbb738c361af..caf5cd0434ca 100644 --- a/src/cmd/flux-start.c +++ b/src/cmd/flux-start.c @@ -860,14 +860,12 @@ void disconnect_cb (flux_t *h, const flux_msg_t *msg, void *arg) { - char *uuid = NULL; + const char *uuid; if (flux_msg_get_route_first (msg, &uuid) < 0) - goto done; + return; if (ctx.verbose >= 1) log_msg ("disconnect from %.5s", uuid); -done: - free (uuid); } const struct flux_msg_handler_spec htab[] = { diff --git a/src/common/libflux/handle.c b/src/common/libflux/handle.c index e9b8a7a54a95..fc319fb03f3a 100644 --- a/src/common/libflux/handle.c +++ b/src/common/libflux/handle.c @@ -684,7 +684,7 @@ flux_msg_t *flux_recv (flux_t *h, struct flux_match match, int flags) cali_begin_int (h->prof.msg_match_tag, match.matchtag); cali_begin_string (h->prof.msg_match_glob, match.topic_glob ? match.topic_glob : "NONE"); - char *sender = NULL; + const char *sender = NULL; flux_msg_get_route_first (msg, &sender); if (sender) cali_begin_string (h->prof.msg_sender, sender); @@ -694,8 +694,6 @@ flux_msg_t *flux_recv (flux_t *h, struct flux_match match, int flags) cali_end (h->prof.msg_match_type); cali_end (h->prof.msg_match_tag); cali_end (h->prof.msg_match_glob); - - free (sender); #endif return msg; fatal: diff --git a/src/common/libflux/message.c b/src/common/libflux/message.c index 175428f1ec3b..b1a5d90c40ee 100644 --- a/src/common/libflux/message.c +++ b/src/common/libflux/message.c @@ -1001,7 +1001,7 @@ int flux_msg_pop_route (flux_msg_t *msg, char **id) } /* replaces flux_msg_nexthop */ -int flux_msg_get_route_last (const flux_msg_t *msg, char **id) +int flux_msg_get_route_last (const flux_msg_t *msg, const char **id) { struct route_id *r; @@ -1013,10 +1013,8 @@ int flux_msg_get_route_last (const flux_msg_t *msg, char **id) errno = EPROTO; return -1; } - if ((r = list_top (&msg->routes, struct route_id, route_id_node))) { - if (!((*id) = strdup (r->id))) - return -1; - } + if ((r = list_top (&msg->routes, struct route_id, route_id_node))) + (*id) = r->id; else (*id) = NULL; return 0; @@ -1033,7 +1031,7 @@ static int find_route_first (const flux_msg_t *msg, struct route_id **r) } /* replaces flux_msg_sender */ -int flux_msg_get_route_first (const flux_msg_t *msg, char **id) +int flux_msg_get_route_first (const flux_msg_t *msg, const char **id) { struct route_id *r = NULL; @@ -1043,10 +1041,8 @@ int flux_msg_get_route_first (const flux_msg_t *msg, char **id) } if (find_route_first (msg, &r) < 0) return -1; - if (r) { - if (!((*id) = strdup (r->id))) - return -1; - } + if (r) + (*id) = r->id; else (*id) = NULL; return 0; @@ -1082,7 +1078,7 @@ static int flux_msg_get_route_size (const flux_msg_t *msg) return size; } -static char *flux_msg_get_route_nth (const flux_msg_t *msg, int n) +static const char *flux_msg_get_route_nth (const flux_msg_t *msg, int n) { struct route_id *r = NULL; int count = 0; @@ -1117,7 +1113,7 @@ char *flux_msg_get_route_string (const flux_msg_t *msg) if (!(cp = buf = malloc (len + hops + 1))) return NULL; for (n = hops - 1; n >= 0; n--) { - char *id; + const char *id; if (cp > buf) *cp++ = '!'; if (!(id = flux_msg_get_route_nth (msg, n))) { diff --git a/src/common/libflux/message.h b/src/common/libflux/message.h index d67e19428b88..40e673f4b2a6 100644 --- a/src/common/libflux/message.h +++ b/src/common/libflux/message.h @@ -330,19 +330,19 @@ int flux_msg_push_route (flux_msg_t *msg, const char *id); */ int flux_msg_pop_route (flux_msg_t *msg, char **id); -/* Copy the first route (e.g. first pushed route) contents (or NULL) - * to 'id'. Caller must free 'id'. +/* Return the first route (e.g. first pushed route) contents (or NULL) + * to 'id'. * For requests, this is the sender; for responses, this is the recipient. * Returns 0 on success, -1 with errno set (e.g. EPROTO) on failure. */ -int flux_msg_get_route_first (const flux_msg_t *msg, char **id); +int flux_msg_get_route_first (const flux_msg_t *msg, const char **id); -/* Copy the last route (e.g. most recent pushed route) contents (or NULL) - * to 'id'. Caller must free 'id'. +/* Return the last route (e.g. most recent pushed route) contents (or NULL) + * to 'id'. * For requests, this is the last hop; for responses: this is the next hop. * Returns 0 on success, -1 with errno set (e.g. EPROTO) on failure. */ -int flux_msg_get_route_last (const flux_msg_t *msg, char **id); +int flux_msg_get_route_last (const flux_msg_t *msg, const char **id); /* Return the number of route frames in the message. * It is an EPROTO error if there is no route stack. diff --git a/src/common/libflux/test/message.c b/src/common/libflux/test/message.c index 02d68d172cf0..fc895538e148 100644 --- a/src/common/libflux/test/message.c +++ b/src/common/libflux/test/message.c @@ -33,7 +33,7 @@ void check_cornercase (void) int type, errnum, status; uint32_t tag; uint8_t flags; - char *route; + const char *route; const char *topic; const void *payload; int payload_size; @@ -311,6 +311,7 @@ void check_cornercase (void) void check_routes (void) { flux_msg_t *msg; + const char *route; char *s; ok ((msg = flux_msg_create (FLUX_MSGTYPE_REQUEST)) != NULL @@ -326,43 +327,39 @@ void check_routes (void) ok (flux_msg_pop_route (msg, &s) == 0 && s == NULL, "flux_msg_pop_route works and sets id to NULL on msg w/o routes"); - ok (flux_msg_get_route_first (msg, &s) == 0 && s == NULL, + ok (flux_msg_get_route_first (msg, &route) == 0 && route == NULL, "flux_msg_get_route_first returns 0, id=NULL on msg w/o routes"); - ok (flux_msg_get_route_last (msg, &s) == 0 && s == NULL, + ok (flux_msg_get_route_last (msg, &route) == 0 && route == NULL, "flux_msg_get_route_last returns 0, id=NULL on msg w/o routes"); ok (flux_msg_push_route (msg, "sender") == 0 && flux_msg_frames (msg) == 3, "flux_msg_push_route works and adds a frame"); ok ((flux_msg_get_route_count (msg) == 1), "flux_msg_get_route_count returns 1 on msg w/ id1"); - ok (flux_msg_get_route_first (msg, &s) == 0 && s != NULL, + ok (flux_msg_get_route_first (msg, &route) == 0 && route != NULL, "flux_msg_get_route_first works"); - like (s, "sender", + like (route, "sender", "flux_msg_get_route_first returns id on msg w/ id1"); - free (s); - ok (flux_msg_get_route_last (msg, &s) == 0 && s != NULL, + ok (flux_msg_get_route_last (msg, &route) == 0 && route != NULL, "flux_msg_get_route_last works"); - like (s, "sender", + like (route, "sender", "flux_msg_get_route_last returns id on msg w/ id1"); - free (s); ok (flux_msg_push_route (msg, "router") == 0 && flux_msg_frames (msg) == 4, "flux_msg_push_route works and adds a frame"); ok ((flux_msg_get_route_count (msg) == 2), "flux_msg_get_route_count returns 2 on msg w/ id1+id2"); - ok (flux_msg_get_route_first (msg, &s) == 0 && s != NULL, + ok (flux_msg_get_route_first (msg, &route) == 0 && route != NULL, "flux_msg_get_route_first works"); - like (s, "sender", + like (route, "sender", "flux_msg_get_route_first returns id1 on msg w/ id1+id2"); - free (s); - ok (flux_msg_get_route_last (msg, &s) == 0 && s != NULL, + ok (flux_msg_get_route_last (msg, &route) == 0 && route != NULL, "flux_msg_get_route_last works"); - like (s, "router", + like (route, "router", "flux_msg_get_route_last returns id2 on message with id1+id2"); - free (s); s = NULL; ok (flux_msg_pop_route (msg, &s) == 0 && s != NULL, diff --git a/src/common/librouter/test/usock_service.c b/src/common/librouter/test/usock_service.c index 859eb5487f4d..66d9fc630d14 100644 --- a/src/common/librouter/test/usock_service.c +++ b/src/common/librouter/test/usock_service.c @@ -63,10 +63,9 @@ void disconnect_cb (flux_t *h, const flux_msg_t *msg, void *arg) { - char *uuid = NULL; + const char *uuid; if (flux_msg_get_route_first (msg, &uuid) == 0) diag ("disconnect from %.5s", uuid); - free (uuid); flux_reactor_stop (flux_get_reactor (h)); } diff --git a/src/common/libsubprocess/server.c b/src/common/libsubprocess/server.c index 573cd102c668..cb5143361eb5 100644 --- a/src/common/libsubprocess/server.c +++ b/src/common/libsubprocess/server.c @@ -525,10 +525,10 @@ static void server_signal_cb (flux_t *h, flux_msg_handler_t *mh, flux_log_error (h, "%s: flux_respond_error", __FUNCTION__); } -char *subprocess_sender (flux_subprocess_t *p) +const char *subprocess_sender (flux_subprocess_t *p) { struct rexec *rex = flux_subprocess_aux_get (p, auxkey); - char *sender; + const char *sender; if (!rex || flux_msg_get_route_first (rex->msg, &sender) < 0) return NULL; @@ -540,7 +540,7 @@ static json_t *process_info (flux_subprocess_t *p) { flux_cmd_t *cmd; char *cmd_str = NULL; - char *sender = NULL; + const char *sender; json_t *info = NULL; if (!(cmd = flux_subprocess_get_cmd (p))) @@ -563,7 +563,6 @@ static json_t *process_info (flux_subprocess_t *p) } cleanup: - free (sender); free (cmd_str); return info; } @@ -682,15 +681,13 @@ int server_terminate_subprocesses (flux_subprocess_server_t *s) static void terminate_uuid (flux_subprocess_t *p, const char *id) { - char *sender; + const char *sender; if (!(sender = subprocess_sender (p))) return; if (!strcmp (id, sender)) server_signal_subprocess (p, SIGKILL); - - free (sender); } int server_terminate_by_uuid (flux_subprocess_server_t *s, diff --git a/src/common/libterminus/pty.c b/src/common/libterminus/pty.c index cf8b3bb6e3e3..98dbd8e30ff4 100644 --- a/src/common/libterminus/pty.c +++ b/src/common/libterminus/pty.c @@ -97,7 +97,7 @@ static void pty_client_destroy (struct pty_client *c) static struct pty_client *pty_client_create (const flux_msg_t *msg) { - char *uuid = NULL; + const char *uuid; struct pty_client *c = NULL; if (!(c = calloc (1, sizeof (*c)))) @@ -105,7 +105,8 @@ static struct pty_client *pty_client_create (const flux_msg_t *msg) if (flux_msg_get_route_first (msg, &uuid) < 0) goto error; c->req = flux_msg_incref (msg); - c->uuid = uuid; + if (!(c->uuid = strdup (uuid))) + goto error; return c; error: pty_client_destroy (c); @@ -128,7 +129,7 @@ static struct pty_client *pty_client_find_sender (struct flux_pty *pty, const flux_msg_t *msg) { struct pty_client *c = NULL; - char *uuid = NULL; + const char *uuid; if (flux_msg_get_route_first (msg, &uuid) < 0) { llog_error (pty, "flux_msg_get_route_first: %s", strerror (errno)); @@ -139,7 +140,6 @@ static struct pty_client *pty_client_find_sender (struct flux_pty *pty, return NULL; } c = pty_client_find (pty, uuid); - free (uuid); return c; } diff --git a/src/common/libterminus/terminus.c b/src/common/libterminus/terminus.c index b88a10c8084d..a4dce598df9f 100644 --- a/src/common/libterminus/terminus.c +++ b/src/common/libterminus/terminus.c @@ -756,19 +756,17 @@ static void disconnect_cb (flux_t *h, { struct flux_terminus_server *ts = arg; struct terminus_session *s; - char *sender = NULL; + const char *sender; if (flux_msg_get_route_first (msg, &sender) < 0) { llog_error (ts, "flux_msg_get_route_first: %s", strerror (errno)); - goto out; + return; } s = zlist_first (ts->sessions); while (s) { flux_pty_disconnect_client (s->pty, sender); s = zlist_next (ts->sessions); } -out: - free (sender); } static const struct flux_msg_handler_spec handler_tab[] = { diff --git a/src/modules/barrier/barrier.c b/src/modules/barrier/barrier.c index 5e933b6ec1db..8b0ee4fdeebf 100644 --- a/src/modules/barrier/barrier.c +++ b/src/modules/barrier/barrier.c @@ -158,7 +158,7 @@ static struct barrier *barrier_create (struct barrier_ctx *ctx, } static int barrier_add_client (struct barrier *b, - char *sender, + const char *sender, const flux_msg_t *msg) { if (zhash_insert (b->clients, sender, (void *)flux_msg_incref (msg)) < 0) { @@ -318,7 +318,7 @@ static void enter_request_cb (flux_t *h, flux_msg_handler_t *mh, { struct barrier_ctx *ctx = arg; struct barrier *b; - char *sender = NULL; + const char *sender; const char *name; int nprocs; uint32_t owner; @@ -346,11 +346,9 @@ static void enter_request_cb (flux_t *h, flux_msg_handler_t *mh, } if (barrier_update (b, 1) < 0) goto error; - free (sender); return; error: flux_respond_error (ctx->h, msg, errno, NULL); - free (sender); } /* Upon client disconnect, abort any pending barriers it was @@ -360,7 +358,7 @@ static void disconnect_request_cb (flux_t *h, flux_msg_handler_t *mh, const flux_msg_t *msg, void *arg) { struct barrier_ctx *ctx = arg; - char *sender = NULL; + const char *sender; const char *key; struct barrier *b; struct flux_msg_cred cred; @@ -382,11 +380,9 @@ static void disconnect_request_cb (flux_t *h, flux_msg_handler_t *mh, flux_log_error (h, "exit_event_send"); } } - free (sender); return; error: flux_log_error (h, "barrier.disconnect"); - free (sender); } static int exit_event_send (flux_t *h, diff --git a/src/modules/job-manager/alloc.c b/src/modules/job-manager/alloc.c index d62452af9476..e0f8e030dc8b 100644 --- a/src/modules/job-manager/alloc.c +++ b/src/modules/job-manager/alloc.c @@ -401,6 +401,7 @@ static void ready_cb (flux_t *h, flux_msg_handler_t *mh, int limit = 0; int count; struct job *job; + const char *sender; if (flux_request_unpack (msg, NULL, "{s:s s?:i}", "mode", &mode, @@ -419,10 +420,14 @@ static void ready_cb (flux_t *h, flux_msg_handler_t *mh, errno = EPROTO; goto error; } - if (flux_msg_get_route_first (msg, &ctx->alloc->sched_sender) < 0) { + if (flux_msg_get_route_first (msg, &sender) < 0) { flux_log_error (h, "%s: flux_msg_get_route_first", __FUNCTION__); goto error; } + if (sender) { + if (!(ctx->alloc->sched_sender = strdup (sender))) + goto error; + } ctx->alloc->ready = true; flux_log (h, LOG_DEBUG, "scheduler: ready %s", mode); count = zlistx_size (ctx->alloc->queue); @@ -766,11 +771,10 @@ void alloc_disconnect_rpc (flux_t *h, struct alloc *alloc = ctx->alloc; if (alloc->sched_sender) { - char *sender = NULL; + const char *sender; if (flux_msg_get_route_first (msg, &sender) == 0 && !strcmp (sender, alloc->sched_sender)) interface_teardown (ctx->alloc, "disconnect", 0); - free (sender); } } diff --git a/src/modules/kvs/test/kvssync.c b/src/modules/kvs/test/kvssync.c index 50e4e53f0c24..447a3c5e7a8f 100644 --- a/src/modules/kvs/test/kvssync.c +++ b/src/modules/kvs/test/kvssync.c @@ -165,7 +165,7 @@ void basic_api_tests (void) bool msgcmp (const flux_msg_t *msg, void *arg) { - char *id = NULL; + const char *id; bool match = false; if (flux_msg_get_route_first (msg, &id) == 0 && (!strcmp (id, "1") @@ -174,8 +174,6 @@ bool msgcmp (const flux_msg_t *msg, void *arg) || !strcmp (id, "4") || !strcmp (id, "5"))) match = true; - if (id) - free (id); return match; } diff --git a/src/modules/kvs/test/waitqueue.c b/src/modules/kvs/test/waitqueue.c index fe81701e97a7..5f3d90863413 100644 --- a/src/modules/kvs/test/waitqueue.c +++ b/src/modules/kvs/test/waitqueue.c @@ -43,13 +43,11 @@ void msghand (flux_t *h, flux_msg_handler_t *mh, bool msgcmp (const flux_msg_t *msg, void *arg) { - char *id = NULL; + const char *id; bool match = false; if (flux_msg_get_route_first (msg, &id) == 0 && (!strcmp (id, "19") || !strcmp (id, "18") || !strcmp (id, "17"))) match = true; - if (id) - free (id); return match; } diff --git a/src/modules/resource/rutil.c b/src/modules/resource/rutil.c index 6cb91832ac6b..b96b7997ddb3 100644 --- a/src/modules/resource/rutil.c +++ b/src/modules/resource/rutil.c @@ -148,24 +148,20 @@ bool rutil_idset_decode_test (const char *idset, unsigned long id) bool rutil_match_request_sender (const flux_msg_t *msg1, const flux_msg_t *msg2) { - char *sender1 = NULL; - char *sender2 = NULL; - bool match = false; + const char *sender1; + const char *sender2; if (!msg1 || !msg2) - goto done; + return false; if (flux_msg_get_route_first (msg1, &sender1) < 0) - goto done; + return false; if (flux_msg_get_route_first (msg2, &sender2) < 0) - goto done; + return false; if (!sender1 || !sender2) - goto done; + return false; if (!strcmp (sender1, sender2)) - match = true; -done: - free (sender1); - free (sender2); - return match; + return true; + return false; } char *rutil_read_file (const char *path, char *errbuf, int errbufsize)