diff --git a/src/slurmctld/fed_mgr.c b/src/slurmctld/fed_mgr.c
index 7b3f6cccc81d4cf0c8f831ff802da11fa71dd3c1..a767913b2b945ba6db20dd66e8c6decb170efed0 100644
--- a/src/slurmctld/fed_mgr.c
+++ b/src/slurmctld/fed_mgr.c
@@ -714,10 +714,14 @@ extern int fed_mgr_fini()
 
 	lock_slurmctld(fed_write_lock);
 
-	slurm_persist_conn_recv_server_fini();
-
+	/* Call _leave_federation() before slurm_persist_conn_recv_server_fini()
+	 * as this will NULL out the cluster's recv persistent connection before
+	 * _server_fini() actually destroy's it. That way the cluster's recv
+	 * connection won't be pointing to bad memory. */
 	_leave_federation();
 
+	slurm_persist_conn_recv_server_fini();
+
 	unlock_slurmctld(fed_write_lock);
 
 	return SLURM_SUCCESS;