diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index a5aa61923121419f5c3eda29d26984a5090ec485..650d4cb67dbcda120e98b7b802ac744bad826d48 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -4964,31 +4964,29 @@ _unpack_layout_info_msg(layout_info_msg_t ** msg, Buf buffer, { int i; char **records; - uint32_t utmp32; + uint32_t utmp32, record_count = 0; char *tmp_str = NULL; xassert(msg != NULL); if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) { *msg = xmalloc(sizeof(layout_info_msg_t)); - safe_unpack32(&(*msg)->record_count, buffer); - (*msg)->records = xmalloc(sizeof(char*) * (*msg)->record_count); + (*msg)->record_count = 0; + safe_unpack32(&record_count, buffer); + (*msg)->records = xmalloc(sizeof(char*) * record_count); records = (*msg)->records; - - i = 0; - while (remaining_buf(buffer) > 0) { + for (i = 0; i < record_count; i++) { safe_unpackstr_xmalloc(&tmp_str, &utmp32, buffer); if (tmp_str != NULL) { if (tmp_str[0] == '\0') { xfree(tmp_str); - break; + } else { + records[(*msg)->record_count] = tmp_str; + // tmp_str = NULL; /* Nothing to free */ + ((*msg)->record_count)++; } - records[i++] = tmp_str; - // tmp_str = NULL; /* Nothing left to free */ - continue; } } - (*msg)->record_count = i; } else { error("%s: protocol_version %hu not supported", __func__, protocol_version); diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index 7c596524cd319c39d4f79e9bae2eb8f615008dcb..20ebb68855fb449b91748c7a6efdf2116f1221a5 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -3944,7 +3944,6 @@ static void _slurm_rpc_layout_show(slurm_msg_t * msg) int dump_size; static int high_buffer_size = (1024 * 1024); Buf buffer = init_buf(high_buffer_size); - int flag = 1; START_TIMER; debug2("Processing RPC: REQUEST_LAYOUT_INFO"); @@ -3962,28 +3961,28 @@ static void _slurm_rpc_layout_show(slurm_msg_t * msg) debug2("%s: unable to get layout[%s]", __func__, layout_req_msg->layout_type); slurm_send_rc_msg(msg, SLURM_NO_CHANGE_IN_DATA); - flag = 0; + free_buf(buffer); + return; } } - if ( flag == 1 ) { - dump_size = get_buf_offset(buffer); - high_buffer_size = MAX(high_buffer_size, dump_size); - dump = xfer_buf_data(buffer); - END_TIMER2("_slurm_rpc_resv_show"); - /* init response_msg structure */ - slurm_msg_t_init(&response_msg); - response_msg.flags = msg->flags; - response_msg.protocol_version = msg->protocol_version; - response_msg.address = msg->address; - response_msg.msg_type = RESPONSE_LAYOUT_INFO; - response_msg.data = dump; - response_msg.data_size = dump_size; + dump_size = get_buf_offset(buffer); + high_buffer_size = MAX(high_buffer_size, dump_size); + dump = xfer_buf_data(buffer); + END_TIMER2("_slurm_rpc_resv_show"); - /* send message */ - slurm_send_node_msg(msg->conn_fd, &response_msg); - xfree(dump); - } + /* init response_msg structure */ + slurm_msg_t_init(&response_msg); + response_msg.flags = msg->flags; + response_msg.protocol_version = msg->protocol_version; + response_msg.address = msg->address; + response_msg.msg_type = RESPONSE_LAYOUT_INFO; + response_msg.data = dump; + response_msg.data_size = dump_size; + + /* send message */ + slurm_send_node_msg(msg->conn_fd, &response_msg); + xfree(dump); } /* _slurm_rpc_update_block - process RPC to update the configuration