diff --git a/src/syncterm/conn.c b/src/syncterm/conn.c
index 283596da8af1b589d8ec00db4c7317fea3c530ba..2d4635d51f64b90684e4615f5516dbf2f674f4aa 100644
--- a/src/syncterm/conn.c
+++ b/src/syncterm/conn.c
@@ -33,28 +33,31 @@ struct conn_buffer *create_conn_buf(struct conn_buffer *buf, size_t size)
 	buf->buftop=0;
 	buf->bufbot=0;
 	if(pthread_mutex_init(&(buf->mutex), NULL)) {
-		free(buf->buf);
+		FREE_AND_NULL(buf->buf);
 		return(NULL);
 	}
 	if(sem_init(&(buf->in_sem), 0, 0)) {
-		free(buf->buf);
+		FREE_AND_NULL(buf->buf);
 		pthread_mutex_destroy(&(buf->mutex));
 		return(NULL);
 	}
 	if(sem_init(&(buf->out_sem), 0, 0)) {
-		free(buf->buf);
+		FREE_AND_NULL(buf->buf);
 		pthread_mutex_destroy(&(buf->mutex));
 		sem_destroy(&(buf->in_sem));
 		return(NULL);
 	}
+	return(buf);
 }
 
 void destroy_conn_buf(struct conn_buffer *buf)
 {
-	FREE_AND_NULL(buf->buf);
-	while(pthread_mutex_destroy(&(buf->mutex)));
-	while(sem_destroy(&(buf->in_sem)));
-	while(sem_destroy(&(buf->out_sem)));
+	if(buf->buf != NULL) {
+		free(buf->buf);
+		while(pthread_mutex_destroy(&(buf->mutex)));
+		while(sem_destroy(&(buf->in_sem)));
+		while(sem_destroy(&(buf->out_sem)));
+	}
 }
 
 /*
@@ -302,6 +305,7 @@ int conn_close(void)
 {
 	if(conn_api.close)
 		return(conn_api.close());
+	return(0);
 }
 
 int conn_socket_connect(struct bbslist *bbs)