diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index 9408cce9417a123c53f646394cc40c07ac0d2706..54f8d63ae25b04f01ca365431e92f9a433cc676d 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -254,6 +254,11 @@ int main(int argc, char *argv[])
 			fatal("pthread_create error %m");
 
 		_slurmctld_background(NULL);	/* could run as pthread */
+
+		/* termination of controller */
+		pthread_join(slurmctld_config.thread_id_sig, NULL);
+		pthread_join(slurmctld_config.thread_id_rpc, NULL);
+		switch_state_fini();
 		if (slurmctld_config.resume_backup == false)
 			break;
 	}
@@ -350,8 +355,6 @@ static void *_slurmctld_signal_hand(void *no_data)
 			slurmctld_config.shutdown_time = time(NULL);
 			/* send REQUEST_SHUTDOWN_IMMEDIATE RPC */
 			slurmctld_shutdown();
-			pthread_join(slurmctld_config.thread_id_rpc, NULL);
-			switch_state_fini();
 			return NULL;	/* Normal termination */
 			break;
 		case SIGHUP:	/* kill -1 */