From 7c0ba102e91925fcebf0c4d3a1742df7b8969d7c Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Tue, 17 Dec 2002 19:57:43 +0000 Subject: [PATCH] Eliminate a bunch of "lost" memory. --- src/slurmctld/agent.c | 11 ++++++----- src/slurmctld/controller.c | 2 ++ src/slurmctld/job_mgr.c | 3 +++ src/slurmctld/read_config.c | 30 ++++++++++++++++++++---------- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/slurmctld/agent.c b/src/slurmctld/agent.c index 4ad9cbde1a2..91f4744f7fd 100644 --- a/src/slurmctld/agent.c +++ b/src/slurmctld/agent.c @@ -416,7 +416,7 @@ static void *_thread_per_node_rpc(void *args) int rc; slurm_fd sockfd; slurm_msg_t request_msg; - slurm_msg_t response_msg; + slurm_msg_t *response_msg = xmalloc(sizeof(slurm_msg_t)); return_code_msg_t *slurm_rc_msg; task_info_t *task_ptr = (task_info_t *) args; thd_t *thread_ptr = task_ptr->thread_struct_ptr; @@ -460,7 +460,7 @@ static void *_thread_per_node_rpc(void *args) } /* receive message */ - if ((msg_size = slurm_receive_msg(sockfd, &response_msg)) + if ((msg_size = slurm_receive_msg(sockfd, response_msg)) == SLURM_SOCKET_ERROR) { error( "_thread_per_node_rpc/slurm_receive_msg to host %s: %m", @@ -481,9 +481,9 @@ static void *_thread_per_node_rpc(void *args) goto cleanup; } - switch (response_msg.msg_type) { + switch (response_msg->msg_type) { case RESPONSE_SLURM_RC: - slurm_rc_msg = (return_code_msg_t *) response_msg.data; + slurm_rc_msg = (return_code_msg_t *) response_msg->data; rc = slurm_rc_msg->return_code; slurm_free_return_code_msg(slurm_rc_msg); if (rc) @@ -499,7 +499,7 @@ static void *_thread_per_node_rpc(void *args) break; default: error("_thread_per_node_rpc from host %s, bad msg_type %d", - thread_ptr->node_name, response_msg.msg_type); + thread_ptr->node_name, response_msg->msg_type); break; } @@ -513,6 +513,7 @@ static void *_thread_per_node_rpc(void *args) pthread_cond_signal(task_ptr->thread_cond_ptr); slurm_mutex_unlock(task_ptr->thread_mutex_ptr); + slurm_free_msg(response_msg); xfree(args); return (void *) NULL; } diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c index 5949e98e3c0..4db83c25ffc 100644 --- a/src/slurmctld/controller.c +++ b/src/slurmctld/controller.c @@ -700,6 +700,7 @@ static void _slurmctld_req (slurm_msg_t * msg) break; case REQUEST_OLD_JOB_RESOURCE_ALLOCATION: _slurm_rpc_old_job_alloc(msg); + slurm_free_old_job_alloc_msg(msg->data); break; case REQUEST_JOB_WILL_RUN: _slurm_rpc_job_will_run(msg->data); @@ -1863,6 +1864,7 @@ static void _slurm_rpc_job_step_create(slurm_msg_t * msg) resp.data = &job_step_resp; slurm_send_node_msg(msg->conn_fd, &resp); + xfree(job_step_resp.node_list); (void) dump_all_job_state(); /* Sets own locks */ } } diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index d8c8f670792..f02799b811c 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -191,6 +191,7 @@ void delete_job_details(struct job_record *job_entry) if (job_entry->details->magic != DETAILS_MAGIC) fatal ("delete_job_details: passed invalid job details pointer"); + FREE_NULL(job_entry->details->credential.node_list); FREE_NULL(job_entry->details->req_nodes); FREE_NULL_BITMAP(job_entry->details->req_node_bitmap); FREE_NULL(job_entry->details->features); @@ -1923,6 +1924,8 @@ static void _list_delete_job(void *job_entry) FREE_NULL(job_record_point->nodes); FREE_NULL_BITMAP(job_record_point->node_bitmap); + FREE_NULL(job_record_point->cpus_per_node); + FREE_NULL(job_record_point->cpu_count_reps); FREE_NULL(job_record_point->node_addr); if (job_record_point->step_list) { delete_all_step_records(job_record_point); diff --git a/src/slurmctld/read_config.c b/src/slurmctld/read_config.c index fbd2a2afcab..b4390cb04d1 100644 --- a/src/slurmctld/read_config.c +++ b/src/slurmctld/read_config.c @@ -48,6 +48,11 @@ #include "src/slurmctld/slurmctld.h" #define BUF_SIZE 1024 +#define FREE_NULL(_X) \ + do { \ + if (_X) xfree (_X); \ + _X = NULL; \ + } while (0) static int _build_bitmaps(void); static int _init_all_slurm_conf(void); @@ -295,6 +300,7 @@ static int _parse_node_spec(char *in_line) error_code = EINVAL; goto cleanup; } + FREE_NULL(state); } if (node_addr && @@ -339,6 +345,7 @@ static int _parse_node_spec(char *in_line) xfree(default_config_record. feature); default_config_record.feature = feature; + feature = NULL; } free(this_node_name); break; @@ -363,6 +370,7 @@ static int _parse_node_spec(char *in_line) if (config_point->feature) xfree(config_point->feature); config_point->feature = feature; + feature = NULL; } } @@ -405,14 +413,16 @@ static int _parse_node_spec(char *in_line) } /* xfree allocated storage */ - if (state) - xfree(state); + if (node_addr) + xfree(node_addr); if (addr_list) hostlist_destroy(addr_list); hostlist_destroy(host_list); return error_code; cleanup: + if (node_addr) + xfree(node_addr); if (node_name) xfree(node_name); if (feature) @@ -487,8 +497,7 @@ static int _parse_part_spec(char *in_line) error_code = EINVAL; goto cleanup; } - xfree(default_str); - default_str = NULL; + FREE_NULL(default_str); } if (root_str) { @@ -503,8 +512,7 @@ static int _parse_part_spec(char *in_line) error_code = EINVAL; goto cleanup; } - xfree(root_str); - root_str = NULL; + FREE_NULL(root_str); } if (shared_str) { @@ -521,8 +529,7 @@ static int _parse_part_spec(char *in_line) error_code = EINVAL; goto cleanup; } - xfree(shared_str); - shared_str = NULL; + FREE_NULL(shared_str); } if (state_str) { @@ -537,8 +544,7 @@ static int _parse_part_spec(char *in_line) error_code = EINVAL; goto cleanup; } - xfree(state_str); - state_str = NULL; + FREE_NULL(state_str); } if (strcasecmp(partition_name, "DEFAULT") == 0) { @@ -557,11 +563,13 @@ static int _parse_part_spec(char *in_line) if (default_part.allow_groups) xfree(default_part.allow_groups); default_part.allow_groups = allow_groups; + allow_groups = NULL; } if (nodes) { if (default_part.nodes) xfree(default_part.nodes); default_part.nodes = nodes; + nodes = NULL; } return 0; } @@ -597,6 +605,7 @@ static int _parse_part_spec(char *in_line) if (part_record_point->allow_groups) xfree(part_record_point->allow_groups); part_record_point->allow_groups = allow_groups; + allow_groups = NULL; } if (nodes) { if (part_record_point->nodes) @@ -609,6 +618,7 @@ static int _parse_part_spec(char *in_line) getnodename(nodes, 128); } part_record_point->nodes = nodes; + nodes = NULL; } xfree(partition_name); return 0; -- GitLab