Changeset: 6511c62b2d4f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6511c62b2d4f
Branch: default
Log Message:

Merge with Oct2020 branch.


diffs (179 lines):

diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c
--- a/monetdb5/modules/mal/mal_mapi.c
+++ b/monetdb5/modules/mal/mal_mapi.c
@@ -675,6 +675,7 @@ start_listen(SOCKET *sockp, int *portp, 
 static str
 SERVERlisten(int port, const char *usockfile, int maxusers)
 {
+       SOCKET socks[3];
        SOCKET *psock;
 #ifdef HAVE_SYS_UN_H
        struct sockaddr_un userver;
@@ -708,13 +709,13 @@ SERVERlisten(int port, const char *usock
                throw(ILLARG, "mal_mapi.listen", OPERATION_FAILED ": port 
number should be between 0 and 65535");
        }
 
-       psock = GDKmalloc(sizeof(SOCKET) * 3);
+       psock = GDKmalloc(sizeof(socks));
        if (psock == NULL)
                throw(MAL,"mal_mapi.listen", SQLSTATE(HY013) MAL_MALLOC_FAIL);
-       psock[0] = psock[1] = psock[2] = INVALID_SOCKET;
+       socks[0] = socks[1] = socks[2] = INVALID_SOCKET;
 
        if (listenaddr == NULL || strcmp(listenaddr, "none") != 0) {
-               char *msg = start_listen(psock, &port, listenaddr, host, 
sizeof(host), maxusers);
+               char *msg = start_listen(socks, &port, listenaddr, host, 
sizeof(host), maxusers);
                if (msg != MAL_SUCCEED) {
                        GDKfree(psock);
                        return msg;
@@ -727,37 +728,37 @@ SERVERlisten(int port, const char *usock
                 * chars long :/ */
                size_t ulen = strlen(usockfile);
                if (ulen >= sizeof(userver.sun_path)) {
-                       if (psock[0] != INVALID_SOCKET)
-                               closesocket(psock[0]);
-                       if (psock[1] != INVALID_SOCKET)
-                               closesocket(psock[1]);
+                       if (socks[0] != INVALID_SOCKET)
+                               closesocket(socks[0]);
+                       if (socks[1] != INVALID_SOCKET)
+                               closesocket(socks[1]);
                        GDKfree(psock);
                        throw(MAL, "mal_mapi.listen",
                                  OPERATION_FAILED ": UNIX socket path too 
long: %s",
                                  usockfile);
                }
 
-               psock[2] = socket(AF_UNIX, SOCK_STREAM
+               socks[2] = socket(AF_UNIX, SOCK_STREAM
 #ifdef SOCK_CLOEXEC
                                                  | SOCK_CLOEXEC
 #endif
                                                  , 0);
-               if (psock[2] == INVALID_SOCKET) {
+               if (socks[2] == INVALID_SOCKET) {
 #ifdef _MSC_VER
                        const char *err = wsaerror(WSAGetLastError());
 #else
                        const char *err = GDKstrerror(errno, (char[128]){0}, 
128);
 #endif
-                       if (psock[0] != INVALID_SOCKET)
-                               closesocket(psock[0]);
-                       if (psock[1] != INVALID_SOCKET)
-                               closesocket(psock[1]);
+                       if (socks[0] != INVALID_SOCKET)
+                               closesocket(socks[0]);
+                       if (socks[1] != INVALID_SOCKET)
+                               closesocket(socks[1]);
                        GDKfree(psock);
                        throw(IO, "mal_mapi.listen",
                                  OPERATION_FAILED ": creation of UNIX socket 
failed: %s", err);
                }
 #if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
-               (void) fcntl(psock[2], F_SETFD, FD_CLOEXEC);
+               (void) fcntl(socks[2], F_SETFD, FD_CLOEXEC);
 #endif
 
                userver.sun_family = AF_UNIX;
@@ -766,25 +767,25 @@ SERVERlisten(int port, const char *usock
                if (remove(usockfile) == -1 && errno != ENOENT) {
                        char *e = createException(IO, "mal_mapi.listen", 
OPERATION_FAILED ": remove UNIX socket file: %s",
                                                                          
GDKstrerror(errno, (char[128]){0}, 128));
-                       if (psock[0] != INVALID_SOCKET)
-                               closesocket(psock[0]);
-                       if (psock[1] != INVALID_SOCKET)
-                               closesocket(psock[1]);
-                       closesocket(psock[2]);
+                       if (socks[0] != INVALID_SOCKET)
+                               closesocket(socks[0]);
+                       if (socks[1] != INVALID_SOCKET)
+                               closesocket(socks[1]);
+                       closesocket(socks[2]);
                        GDKfree(psock);
                        return e;
                }
-               if (bind(psock[2], (struct sockaddr *) &userver, length) == 
SOCKET_ERROR) {
+               if (bind(socks[2], (struct sockaddr *) &userver, length) == 
SOCKET_ERROR) {
 #ifdef _MSC_VER
                        const char *err = wsaerror(WSAGetLastError());
 #else
                        const char *err = GDKstrerror(errno, (char[128]){0}, 
128);
 #endif
-                       if (psock[0] != INVALID_SOCKET)
-                               closesocket(psock[0]);
-                       if (psock[1] != INVALID_SOCKET)
-                               closesocket(psock[1]);
-                       closesocket(psock[2]);
+                       if (socks[0] != INVALID_SOCKET)
+                               closesocket(socks[0]);
+                       if (socks[1] != INVALID_SOCKET)
+                               closesocket(socks[1]);
+                       closesocket(socks[2]);
                        (void) remove(usockfile);
                        GDKfree(psock);
                        throw(IO, "mal_mapi.listen",
@@ -792,17 +793,17 @@ SERVERlisten(int port, const char *usock
                                  ": binding to UNIX socket file %s failed: %s",
                                  usockfile, err);
                }
-               if (listen(psock[2], maxusers) == SOCKET_ERROR) {
+               if (listen(socks[2], maxusers) == SOCKET_ERROR) {
 #ifdef _MSC_VER
                        const char *err = wsaerror(WSAGetLastError());
 #else
                        const char *err = GDKstrerror(errno, (char[128]){0}, 
128);
 #endif
-                       if (psock[0] != INVALID_SOCKET)
-                               closesocket(psock[0]);
-                       if (psock[1] != INVALID_SOCKET)
-                               closesocket(psock[1]);
-                       closesocket(psock[2]);
+                       if (socks[0] != INVALID_SOCKET)
+                               closesocket(socks[0]);
+                       if (socks[1] != INVALID_SOCKET)
+                               closesocket(socks[1]);
+                       closesocket(socks[2]);
                        (void) remove(usockfile);
                        GDKfree(psock);
                        throw(IO, "mal_mapi.listen",
@@ -817,15 +818,16 @@ SERVERlisten(int port, const char *usock
         * predictable... */
        srand((unsigned int) GDKusec());
 
+       memcpy(psock, socks, sizeof(socks));
        if (MT_create_thread(&pid, (void (*)(void *)) SERVERlistenThread, psock,
                                                 MT_THR_DETACHED, 
"listenThread") != 0) {
-               if (psock[0] != INVALID_SOCKET)
-                       closesocket(psock[0]);
-               if (psock[1] != INVALID_SOCKET)
-                       closesocket(psock[1]);
+               if (socks[0] != INVALID_SOCKET)
+                       closesocket(socks[0]);
+               if (socks[1] != INVALID_SOCKET)
+                       closesocket(socks[1]);
 #ifdef HAVE_SYS_UN_H
-               if (psock[2] != INVALID_SOCKET)
-                       closesocket(psock[2]);
+               if (socks[2] != INVALID_SOCKET)
+                       closesocket(socks[2]);
 #endif
                GDKfree(psock);
                throw(MAL, "mal_mapi.listen", OPERATION_FAILED ": starting 
thread failed");
@@ -833,7 +835,7 @@ SERVERlisten(int port, const char *usock
 
        TRC_DEBUG(MAL_SERVER, "Ready to accept connections on: %s:%d\n", host, 
port);
 
-       if (psock[0] != INVALID_SOCKET || psock[1] != INVALID_SOCKET) {
+       if (socks[0] != INVALID_SOCKET || socks[1] != INVALID_SOCKET) {
                if (!GDKinmemory() && (buf = msab_marchConnection(host, port)) 
!= NULL)
                        free(buf);
                else
@@ -842,7 +844,7 @@ SERVERlisten(int port, const char *usock
                                   "mapi:monetdb://%s:%i/\n", host, port);
        }
 #ifdef HAVE_SYS_UN_H
-       if (psock[2] != INVALID_SOCKET) {
+       if (socks[2] != INVALID_SOCKET) {
                if (!GDKinmemory() && (buf = msab_marchConnection(usockfile, 
0)) != NULL)
                        free(buf);
                else
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to