diff --git a/src/syncterm/conn.c b/src/syncterm/conn.c
index 621f7b43b21b7bd614210a7ee8fd16aa688ad867..df9383155443279f21de9b5de9cf68ed95970c76 100644
--- a/src/syncterm/conn.c
+++ b/src/syncterm/conn.c
@@ -258,7 +258,7 @@ size_t conn_buf_wait_cond(struct conn_buffer *buf, size_t bcount, unsigned long
 
 BOOL conn_connected(void)
 {
-	if(conn_api.input_thread_running && conn_api.output_thread_running)
+	if(conn_api.input_thread_running == 1 && conn_api.output_thread_running == 1)
 		return(TRUE);
 	return(FALSE);
 }
@@ -396,7 +396,7 @@ int conn_connect(struct bbslist *bbs)
 	if(conn_api.connect) {
 		if(conn_api.connect(bbs)) {
 			conn_api.terminate = 1;
-			while(conn_api.input_thread_running || conn_api.output_thread_running)
+			while(conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1)
 				SLEEP(1);
 		}
 		else {
diff --git a/src/syncterm/conn_pty.c b/src/syncterm/conn_pty.c
index 1b823d9a6c0b72243a2ab1e1a3ce251fda127293..fde230d6b49497b501c2ffd1b71957fce50c46b6 100644
--- a/src/syncterm/conn_pty.c
+++ b/src/syncterm/conn_pty.c
@@ -327,7 +327,7 @@ void pty_input_thread(void *args)
 			pthread_mutex_unlock(&(conn_inbuf.mutex));
 		}
 	}
-	conn_api.input_thread_running=0;
+	conn_api.input_thread_running=2;
 }
 
 #ifdef __BORLANDC__
@@ -383,7 +383,7 @@ void pty_output_thread(void *args)
 		if(ret==-1)
 			break;
 	}
-	conn_api.output_thread_running=0;
+	conn_api.output_thread_running=2;
 }
 
 int pty_connect(struct bbslist *bbs)
@@ -498,7 +498,7 @@ int pty_close(void)
 	kill(child_pid, SIGKILL);
 	waitpid(child_pid, &status, 0);
 
-	while(conn_api.input_thread_running || conn_api.output_thread_running) {
+	while(conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1) {
 		conn_recv_upto(garbage, sizeof(garbage), 0);
 		SLEEP(1);
 	}
diff --git a/src/syncterm/modem.c b/src/syncterm/modem.c
index aa956535eb05538d6940d570a5252d193bfe2a19..5f8cf66261198b4c0d5e7c9d433346b62d206fda 100644
--- a/src/syncterm/modem.c
+++ b/src/syncterm/modem.c
@@ -50,7 +50,7 @@ void modem_input_thread(void *args)
     }
     if(args != NULL)
         comLowerDTR(com);
-    conn_api.input_thread_running=0;
+    conn_api.input_thread_running=2;
 }
 
 void modem_output_thread(void *args)
@@ -91,7 +91,7 @@ void modem_output_thread(void *args)
                 break;
         }
     }
-    conn_api.output_thread_running=0;
+    conn_api.output_thread_running=2;
 }
 
 int modem_response(char *str, size_t maxlen, int timeout)
@@ -334,7 +334,7 @@ int serial_close(void)
 {
     conn_api.terminate=1;
 
-    while(conn_api.input_thread_running || conn_api.output_thread_running)
+    while(conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1)
         SLEEP(1);
     comClose(com);
     destroy_conn_buf(&conn_inbuf);
@@ -368,7 +368,7 @@ int modem_close(void)
     }
 
 CLOSEIT:
-    while(conn_api.input_thread_running || conn_api.output_thread_running) {
+    while(conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1) {
         conn_recv_upto(garbage, sizeof(garbage), 0);
         SLEEP(1);
     }
diff --git a/src/syncterm/rlogin.c b/src/syncterm/rlogin.c
index e7886743240b6f6a175f3d88401ee1454044ed2a..f1b6f5821e6fb8e49f22e79690bdbc1aacff2533 100644
--- a/src/syncterm/rlogin.c
+++ b/src/syncterm/rlogin.c
@@ -55,7 +55,7 @@ void rlogin_input_thread(void *args)
 			pthread_mutex_unlock(&(conn_inbuf.mutex));
 		}
 	}
-	conn_api.input_thread_running=0;
+	conn_api.input_thread_running=2;
 }
 
 #ifdef __BORLANDC__
@@ -109,7 +109,7 @@ void rlogin_output_thread(void *args)
 		if(ret==-1)
 			break;
 	}
-	conn_api.output_thread_running=0;
+	conn_api.output_thread_running=2;
 }
 
 int rlogin_connect(struct bbslist *bbs)
@@ -253,7 +253,7 @@ int rlogin_close(void)
 
 	conn_api.terminate=1;
 	closesocket(rlogin_sock);
-	while(conn_api.input_thread_running || conn_api.output_thread_running) {
+	while(conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1) {
 		conn_recv_upto(garbage, sizeof(garbage), 0);
 		SLEEP(1);
 	}
diff --git a/src/syncterm/ssh.c b/src/syncterm/ssh.c
index 2ce559301bdfab916b72bb46c3b4977fdead35f4..c07f6b8a0106afd02c12620a08af9802672f2a33 100644
--- a/src/syncterm/ssh.c
+++ b/src/syncterm/ssh.c
@@ -99,7 +99,7 @@ void ssh_input_thread(void *args)
 			}
 		}
 	}
-	conn_api.input_thread_running=0;
+	conn_api.input_thread_running=2;
 }
 
 void ssh_output_thread(void *args)
@@ -142,7 +142,7 @@ void ssh_output_thread(void *args)
 		else
 			pthread_mutex_unlock(&(conn_outbuf.mutex));
 	}
-	conn_api.output_thread_running=0;
+	conn_api.output_thread_running=2;
 }
 
 int ssh_connect(struct bbslist *bbs)
@@ -350,7 +350,7 @@ int ssh_close(void)
 	conn_api.terminate=1;
 	ssh_active=FALSE;
 	cl.SetAttribute(ssh_session, CRYPT_SESSINFO_ACTIVE, 0);
-	while(conn_api.input_thread_running || conn_api.output_thread_running) {
+	while(conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1) {
 		conn_recv_upto(garbage, sizeof(garbage), 0);
 		SLEEP(1);
 	}