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)