From c91701c9086f0b89c0bfdba8b3c32a89f0d6bf5e Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Sun, 27 May 2007 20:33:12 +0000
Subject: [PATCH] Bugfix: calling conn_destroy_buf() on an uninitialized buffer
 would hang on Win32 Clean up some return values.

---
 src/syncterm/conn.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/syncterm/conn.c b/src/syncterm/conn.c
index 283596da8a..2d4635d51f 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)
-- 
GitLab