From f41e0ed8183b618a89ce55bb744f37df48096991 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Tue, 8 Feb 2005 19:00:29 +0000 Subject: [PATCH] Remove redundant xstrdup() calls, caused very slow memory leak. --- src/plugins/select/bluegene/bgl_job_place.c | 1 + src/plugins/select/bluegene/bgl_job_run.c | 48 +++++++++------------ 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/src/plugins/select/bluegene/bgl_job_place.c b/src/plugins/select/bluegene/bgl_job_place.c index ca17fc61db1..44a132fdce7 100644 --- a/src/plugins/select/bluegene/bgl_job_place.c +++ b/src/plugins/select/bluegene/bgl_job_place.c @@ -71,6 +71,7 @@ static void _rotate_geo(uint16_t *req_geometry, int rot_cnt) break; } } + /* * finds the best match for a given job request * diff --git a/src/plugins/select/bluegene/bgl_job_run.c b/src/plugins/select/bluegene/bgl_job_run.c index 76da6673319..faf33c7ca51 100644 --- a/src/plugins/select/bluegene/bgl_job_run.c +++ b/src/plugins/select/bluegene/bgl_job_run.c @@ -430,11 +430,11 @@ static void _part_op(bgl_update_t *bgl_update_ptr) pthread_t thread_agent; int retries; + slurm_mutex_lock(&agent_cnt_mutex); if ((bgl_update_list == NULL) && ((bgl_update_list = list_create(_bgl_list_del)) == NULL)) fatal("malloc failure in start_job/list_create"); - slurm_mutex_lock(&agent_cnt_mutex); if (list_enqueue(bgl_update_list, bgl_update_ptr) == NULL) fatal("malloc failure in _part_op/list_enqueue"); if (agent_cnt > 0) { /* already running an agent */ @@ -527,19 +527,15 @@ extern int start_job(struct job_record *job_ptr) { int rc = SLURM_SUCCESS; #ifdef HAVE_BGL_FILES - pm_partition_id_t bgl_part_id; - bgl_update_t *bgl_update_ptr; - - select_g_get_jobinfo(job_ptr->select_jobinfo, - SELECT_DATA_PART_ID, &bgl_part_id); - info("Queue start of job %u in BGL partition %s", - job_ptr->job_id, bgl_part_id); + bgl_update_t *bgl_update_ptr = xmalloc(sizeof(bgl_update_t)); - bgl_update_ptr = xmalloc(sizeof(bgl_update_t)); bgl_update_ptr->op = START_OP; bgl_update_ptr->uid = job_ptr->user_id; bgl_update_ptr->job_id = job_ptr->job_id; - bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id); + select_g_get_jobinfo(job_ptr->select_jobinfo, + SELECT_DATA_PART_ID, &(bgl_update_ptr->bgl_part_id)); + info("Queue start of job %u in BGL partition %s", + job_ptr->job_id, bgl_update_ptr->bgl_part_id); _part_op(bgl_update_ptr); #endif return rc; @@ -584,20 +580,15 @@ int term_job(struct job_record *job_ptr) { int rc = SLURM_SUCCESS; #ifdef HAVE_BGL_FILES - pm_partition_id_t bgl_part_id; - bgl_update_t *bgl_update_ptr; - - /* Identify the BGL block */ - select_g_get_jobinfo(job_ptr->select_jobinfo, - SELECT_DATA_PART_ID, &bgl_part_id); - info("Queue termination of job %u in BGL partition %s", - job_ptr->job_id, bgl_part_id); + bgl_update_t *bgl_update_ptr = xmalloc(sizeof(bgl_update_t)); - bgl_update_ptr = xmalloc(sizeof(bgl_update_t)); bgl_update_ptr->op = TERM_OP; bgl_update_ptr->uid = job_ptr->user_id; bgl_update_ptr->job_id = job_ptr->job_id; - bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id); + select_g_get_jobinfo(job_ptr->select_jobinfo, + SELECT_DATA_PART_ID, &(bgl_update_ptr->bgl_part_id)); + info("Queue termination of job %u in BGL partition %s", + job_ptr->job_id, bgl_update_ptr->bgl_part_id); _part_op(bgl_update_ptr); #endif return rc; @@ -613,7 +604,6 @@ extern int sync_jobs(List job_list) #ifdef HAVE_BGL_FILES ListIterator job_iterator, block_iterator; struct job_record *job_ptr; - pm_partition_id_t bgl_part_id; List block_list = _get_all_blocks(); bgl_update_t *bgl_update_ptr; @@ -622,24 +612,26 @@ extern int sync_jobs(List job_list) while ((job_ptr = (struct job_record *) list_next(job_iterator))) { if (job_ptr->job_state != JOB_RUNNING) continue; + + bgl_update_ptr = xmalloc(sizeof(bgl_update_t)); select_g_get_jobinfo(job_ptr->select_jobinfo, - SELECT_DATA_PART_ID, &bgl_part_id); + SELECT_DATA_PART_ID, &(bgl_update_ptr->bgl_part_id)); - if (_excise_block(block_list, bgl_part_id, job_ptr->nodes) - != SLURM_SUCCESS) { + if (_excise_block(block_list, bgl_update_ptr->bgl_part_id, + job_ptr->nodes) != SLURM_SUCCESS) { error("Kill job %u belongs to defunct bglblock %s", - job_ptr->job_id, bgl_part_id); + job_ptr->job_id, bgl_update_ptr->bgl_part_id); job_ptr->job_state = JOB_FAILED | JOB_COMPLETING; + xfree(bgl_update_ptr); + xfree(bgl_update_ptr->bgl_part_id); continue; } debug3("Queue sync of job %u in BGL partition %s", - job_ptr->job_id, bgl_part_id); - bgl_update_ptr = xmalloc(sizeof(bgl_update_t)); + job_ptr->job_id, bgl_update_ptr->bgl_part_id); bgl_update_ptr->op = SYNC_OP; bgl_update_ptr->uid = job_ptr->user_id; bgl_update_ptr->job_id = job_ptr->job_id; - bgl_update_ptr->bgl_part_id = xstrdup(bgl_part_id); _part_op(bgl_update_ptr); } list_iterator_destroy(job_iterator); -- GitLab