diff --git a/src/srun/srun.c b/src/srun/srun.c
index 3b4adfede6986cdcc5531d93335288b4a4074d21..947d66daf3291312080e5911d4127156e048ef83 100644
--- a/src/srun/srun.c
+++ b/src/srun/srun.c
@@ -488,7 +488,7 @@ int srun(int ac, char **av)
 	_send_step_complete_rpc(global_rc);
 	if (msg_thread) {
 		srun_shutdown = true;
-		pthread_kill(msg_thread, SIGINT);
+		pthread_cancel(msg_thread);
 		pthread_join(msg_thread, NULL);
 	}
 #else
@@ -1123,6 +1123,9 @@ static void *_msg_thr_internal(void *arg)
 	slurm_msg_t *msg;
 	int *slurmctld_fd_ptr = (int *)arg;
 
+	(void) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+	(void) pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
+
 	while (!srun_shutdown) {
 		newsockfd = slurm_accept_msg_conn(*slurmctld_fd_ptr, &cli_addr);
 		if (newsockfd == SLURM_SOCKET_ERROR) {