summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tcp.c10
-rw-r--r--tls.c10
2 files changed, 16 insertions, 4 deletions
diff --git a/tcp.c b/tcp.c
index 11bad5e..e903cc5 100644
--- a/tcp.c
+++ b/tcp.c
@@ -317,6 +317,7 @@ void *tcpservernew(void *arg) {
struct client *client;
s = *(int *)arg;
+ free(arg);
if (getpeername(s, (struct sockaddr *)&from, &fromlen)) {
debug(DBG_DBG, "tcpservernew: getpeername failed, exiting");
goto exit;
@@ -344,7 +345,7 @@ exit:
void *tcplistener(void *arg) {
pthread_t tcpserverth;
- int s, *sp = (int *)arg;
+ int s, *sp = (int *)arg, *s_arg = NULL;
struct sockaddr_storage from;
socklen_t fromlen = sizeof(from);
@@ -356,8 +357,13 @@ void *tcplistener(void *arg) {
debug(DBG_WARN, "accept failed");
continue;
}
- if (pthread_create(&tcpserverth, &pthread_attr, tcpservernew, (void *)&s)) {
+ s_arg = malloc(sizeof(s));
+ if (!s_arg)
+ debugx(1, DBG_ERR, "malloc failed");
+ *s_arg = s;
+ if (pthread_create(&tcpserverth, &pthread_attr, tcpservernew, (void *) s_arg)) {
debug(DBG_ERR, "tcplistener: pthread_create failed");
+ free(s_arg);
shutdown(s, SHUT_RDWR);
close(s);
continue;
diff --git a/tls.c b/tls.c
index d33fc1b..38f3bb3 100644
--- a/tls.c
+++ b/tls.c
@@ -398,6 +398,7 @@ void *tlsservernew(void *arg) {
struct tls *accepted_tls = NULL;
s = *(int *)arg;
+ free(arg);
if (getpeername(s, (struct sockaddr *)&from, &fromlen)) {
debug(DBG_DBG, "tlsservernew: getpeername failed, exiting");
goto exit;
@@ -458,7 +459,7 @@ exit:
void *tlslistener(void *arg) {
pthread_t tlsserverth;
- int s, *sp = (int *)arg;
+ int s, *sp = (int *)arg, *s_arg = NULL;
struct sockaddr_storage from;
socklen_t fromlen = sizeof(from);
@@ -470,8 +471,13 @@ void *tlslistener(void *arg) {
debug(DBG_WARN, "accept failed");
continue;
}
- if (pthread_create(&tlsserverth, &pthread_attr, tlsservernew, (void *)&s)) {
+ s_arg = malloc(sizeof(s));
+ if (!s_arg)
+ debugx(1, DBG_ERR, "malloc failed");
+ *s_arg = s;
+ if (pthread_create(&tlsserverth, &pthread_attr, tlsservernew, (void *) s_arg)) {
debug(DBG_ERR, "tlslistener: pthread_create failed");
+ free(s_arg);
shutdown(s, SHUT_RDWR);
close(s);
continue;