diff --git a/src/slurmctld/backup.c b/src/slurmctld/backup.c
index 8dd8bef7227f5876ac4d3350b735464f492c31df..cc2eebe512fff1aebd72dad47f9de754b65dfae0 100644
--- a/src/slurmctld/backup.c
+++ b/src/slurmctld/backup.c
@@ -125,6 +125,8 @@ void run_backup(void)
 	pthread_kill(slurmctld_config.thread_id_sig, SIGTERM);
 	pthread_join(slurmctld_config.thread_id_sig, NULL);
 
+	/* clear old state and read new state */
+	job_fini();
 	if (read_slurm_conf(1))	/* Recover all state */
 		fatal("Unable to recover slurm state");
 	slurmctld_config.shutdown_time = (time_t) 0;
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index d6d2d2adaaa899a1f72480b1ce799a8c3a0dfa9f..143d1afd0fed8cd003c0d43240624dcdc31f94fc 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -3115,8 +3115,10 @@ bool job_epilog_complete(uint32_t job_id, char *node_name,
 /* job_fini - free all memory associated with job records */
 void job_fini (void) 
 {
-	if (job_list)
+	if (job_list) {
 		list_destroy(job_list);
+		job_list = NULL;
+	}
 	xfree(job_hash);
 	xfree(job_hash_over);
 }
diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c
index d27efb20935957dba0d0f7b0eaefc94c36b53626..48e6731e39cf3e7faa5188aa3e2f9b3892664de3 100644
--- a/src/slurmctld/node_mgr.c
+++ b/src/slurmctld/node_mgr.c
@@ -1541,8 +1541,10 @@ void make_node_idle(struct node_record *node_ptr,
 /* node_fini - free all memory associated with node records */
 void node_fini(void)
 {
-	if (config_list)
+	if (config_list) {
 		list_destroy(config_list);
+		config_list = NULL;
+	}
 	xfree(node_record_table_ptr);
 	xfree(node_hash_table);
 }
diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c
index 5bc4e3c2082ca8a7f436c6124a6b37c028ae8f91..052a4e69618fedb7dbd733bada6f0f62118199e0 100644
--- a/src/slurmctld/partition_mgr.c
+++ b/src/slurmctld/partition_mgr.c
@@ -923,6 +923,9 @@ static int _uid_list_size(uid_t * uid_list_ptr)
 /* part_fini - free all memory associated with partition records */
 void part_fini (void) 
 {
-	if (part_list)
+	if (part_list) {
 		list_destroy(part_list);
+		part_list = NULL;
+	}
+	default_part_loc = (struct part_record *) NULL;
 }