diff --git a/src/plugins/select/bluegene/ba_bgq/block_allocator.c b/src/plugins/select/bluegene/ba_bgq/block_allocator.c index dee8ef1dd026c877d4de20cc97af8dbec2941485..077f3621f891cd6b9bb49586a9dc4eee684dfb67 100644 --- a/src/plugins/select/bluegene/ba_bgq/block_allocator.c +++ b/src/plugins/select/bluegene/ba_bgq/block_allocator.c @@ -1519,6 +1519,7 @@ extern struct job_record *ba_remove_job_in_block_job_list( select_jobinfo_t *jobinfo; ba_mp_t *ba_mp; char *tmp_char = NULL, *tmp_char2 = NULL, *tmp_char3 = NULL; + bool bad_magic = 0; xassert(bg_record); @@ -1534,7 +1535,7 @@ extern struct job_record *ba_remove_job_in_block_job_list( "a job with bad magic, you should " "probably reboot the block.", bg_record->bg_block_id); - return NULL; + bad_magic = 1; } itr = list_iterator_create(bg_record->job_list); @@ -1544,7 +1545,8 @@ extern struct job_record *ba_remove_job_in_block_job_list( bg_record->bg_block_id); list_delete_item(itr); continue; - } + } else if (bad_magic) + continue; if (!in_job_ptr) { /* if there is not an in_job_ptr it is because @@ -1567,7 +1569,9 @@ extern struct job_record *ba_remove_job_in_block_job_list( } list_iterator_destroy(itr); - if (in_job_ptr && !job_ptr) { + if (bad_magic) + return NULL; + else if (in_job_ptr && !job_ptr) { if (bg_conf->slurm_debug_flags & DEBUG_FLAG_SELECT_TYPE) { error("ba_remove_job_in_block_job_list: " "Couldn't remove sub-block job %u from " diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc b/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc index f57b694024b61b56a1e2833e6aabd2dac7fae586..8b5c9a89cd7042768bf0fa25244ad47c0d1ae4b7 100644 --- a/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc +++ b/src/plugins/select/bluegene/bl_bgq/bridge_linker.cc @@ -980,7 +980,7 @@ extern int bridge_block_sync_users(bg_record_t *bg_record) return REMOVE_USER_ERR; } - if (bg_record->job_ptr) { + if (bg_record->job_ptr && (bg_record->job_ptr->magic == JOB_MAGIC)) { select_jobinfo_t *jobinfo = (select_jobinfo_t *) bg_record->job_ptr->select_jobinfo->data; BOOST_FOREACH(const std::string& user, vec) { @@ -1003,7 +1003,14 @@ extern int bridge_block_sync_users(bg_record_t *bg_record) * name from the vector as we go. */ while ((job_ptr = (struct job_record *)list_next(itr))) { - select_jobinfo_t *jobinfo = (select_jobinfo_t *) + select_jobinfo_t *jobinfo; + + if (job_ptr->magic != JOB_MAGIC) { + list_delete_item(itr); + continue; + } + + jobinfo = (select_jobinfo_t *) job_ptr->select_jobinfo->data; iter = std::find(vec.begin(), vec.end(), jobinfo->user_name);