From 7d82690a0b5f7f53a87cd7d7d0564b540714108c Mon Sep 17 00:00:00 2001 From: Alex Lin Date: Mon, 29 Aug 2016 13:11:04 -0500 Subject: [PATCH] tc_init is not thread-safe #289 Made the global sockaddr variables local and cleared them with a memset. --- trick_source/trick_utils/comm/src/tc_accept.c | 3 ++- trick_source/trick_utils/comm/src/tc_init.c | 4 +++- trick_source/trick_utils/comm/src/tc_init_udp_client.c | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/trick_source/trick_utils/comm/src/tc_accept.c b/trick_source/trick_utils/comm/src/tc_accept.c index 0406aef7..a66c9309 100644 --- a/trick_source/trick_utils/comm/src/tc_accept.c +++ b/trick_source/trick_utils/comm/src/tc_accept.c @@ -18,7 +18,6 @@ #include "dmtcpaware.h" #endif -static struct sockaddr_in s_in; int tc_accept_(TCDevice * listen_device, TCDevice * device, const char *file, int line) { @@ -31,7 +30,9 @@ int tc_accept_(TCDevice * listen_device, TCDevice * device, const char *file, in char *ptrL; char client_str[TC_TAG_LENGTH + 256]; unsigned char byte_info[TC_BYTE_INFO_LENGTH]; + struct sockaddr_in s_in; + memset(&s_in, 0, sizeof(struct sockaddr_in)) ; /* Accept On Listen Device */ length = sizeof(s_in); #if _DMTCP diff --git a/trick_source/trick_utils/comm/src/tc_init.c b/trick_source/trick_utils/comm/src/tc_init.c index 48e26230..164ce7d3 100644 --- a/trick_source/trick_utils/comm/src/tc_init.c +++ b/trick_source/trick_utils/comm/src/tc_init.c @@ -19,7 +19,6 @@ int tc_init(TCDevice * listen_device) { return tc_init_with_connection_info( listen_device, TRICKCOMM_SOCKET_FAMILY, SOCK_STREAM, NULL, listen_device->port ) ; } -static struct sockaddr_in s_in; int tc_init_with_connection_info( TCDevice * listen_device, int domain, @@ -35,6 +34,9 @@ int tc_init_with_connection_info( TCDevice * listen_device, #ifdef __WIN32__ WSADATA wsaData; #endif + struct sockaddr_in s_in; + + memset(&s_in, 0, sizeof(struct sockaddr_in)) ; if (!listen_device) { TrickErrorHndlr *temp_error_hndlr = NULL; diff --git a/trick_source/trick_utils/comm/src/tc_init_udp_client.c b/trick_source/trick_utils/comm/src/tc_init_udp_client.c index ecc7fcc6..b67e536c 100644 --- a/trick_source/trick_utils/comm/src/tc_init_udp_client.c +++ b/trick_source/trick_utils/comm/src/tc_init_udp_client.c @@ -23,7 +23,6 @@ #include "trick/tc_proto.h" #include "trick/trick_byteswap.h" -static struct sockaddr_in sockin; int tc_init_udp_client(TCDevice * udp_client_device) { @@ -33,6 +32,9 @@ int tc_init_udp_client(TCDevice * udp_client_device) int on = 1; struct hostent *h; int the_socket; + struct sockaddr_in sockin; + + memset(&sockin, 0 , sizeof(struct sockaddr_in)) ; if (!udp_client_device) { trick_error_report(udp_client_device->error_handler,