Changeset: 0d2e5d18335a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0d2e5d18335a
Modified Files:
        NT/monetdb_config.h.in
        clients/mapiclient/mnc.c
        clients/mapilib/mapi.c
        common/stream/stream.c
        configure.ag
        monetdb5/mal/mal_parser.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/mal/language.c
        monetdb5/modules/mal/mal_mapi.c
        tools/merovingian/daemon/client.c
        tools/merovingian/daemon/connections.c
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/daemon/forkmserver.c
        tools/merovingian/daemon/handlers.c
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/daemon/multiplex-funnel.c
        tools/merovingian/daemon/proxy.c
        tools/merovingian/utils/control.c
        tools/merovingian/utils/properties.c
        tools/mserver/shutdowntest.c
Branch: default
Log Message:

Merge with Mar2018 branch.


diffs (truncated from 1056 to 300 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -892,10 +892,6 @@ c99_snprintf(char *outBuf, size_t size, 
 #define ssize_t int
 #endif
 
-/* normally defined in fcntl.h, but not on Windows */
-#define O_CLOEXEC 0
-
-
 typedef int64_t lng;
 typedef uint64_t ulng;
 #define SIZEOF_LNG 8
diff --git a/clients/mapiclient/mnc.c b/clients/mapiclient/mnc.c
--- a/clients/mapiclient/mnc.c
+++ b/clients/mapiclient/mnc.c
@@ -55,6 +55,9 @@
 #define SOCKLEN int
 #endif
 
+#if !defined(HAVE_ACCEPT4) || !defined(SOCK_CLOEXEC)
+#define accept4(sockfd, addr, addlen, flags)   accept(sockfd, addr, addrlen)
+#endif
 
 static void
 usage(void)
@@ -162,15 +165,19 @@ main(int argc, char **argv)
                        exit(1);
                }
                for (rp = res; rp; rp = rp->ai_next) {
-                       s = socket(rp->ai_family, rp->ai_socktype, 
rp->ai_protocol);
+                       s = socket(rp->ai_family, rp->ai_socktype
+#ifdef SOCK_CLOEXEC
+                                  | SOCK_CLOEXEC
+#endif
+                                  , rp->ai_protocol);
                        if (s == INVALID_SOCKET)
                                continue;
                        if (connect(s, rp->ai_addr, (socklen_t) rp->ai_addrlen) 
!= SOCKET_ERROR)
                                break;  /* success */
                        closesocket(s);
                }
-#ifdef HAVE_FCNTL
-               fcntl(s, F_SETFD, FD_CLOEXEC);
+#if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
+               (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
                freeaddrinfo(res);
                if (rp == NULL) {
@@ -191,14 +198,18 @@ main(int argc, char **argv)
                memcpy(&server.sin_addr, hp->h_addr_list[0], hp->h_length);
                server.sin_family = hp->h_addrtype;
                server.sin_port = htons((unsigned short) (port & 0xFFFF));
-               s = socket(server.sin_family, SOCK_STREAM, IPPROTO_TCP);
+               s = socket(server.sin_family, SOCK_STREAM
+#ifdef SOCK_CLOEXEC
+                          | SOCK_CLOEXEC
+#endif
+                          , IPPROTO_TCP);
 
                if (s == INVALID_SOCKET) {
                        fprintf(stderr, "opening socket failed: %s\n", 
strerror(errno));
                        exit(1);
                }
-#ifdef HAVE_FCNTL
-               fcntl(s, F_SETFD, FD_CLOEXEC);
+#if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
+               (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
 
                if (connect(s, serv, sizeof(server)) == SOCKET_ERROR) {
@@ -220,12 +231,16 @@ main(int argc, char **argv)
                        exit(1);
                }
 
-               if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 
{
+               if ((sock = socket(AF_INET, SOCK_STREAM
+#ifdef SOCK_CLOEXEC
+                                  | SOCK_CLOEXEC
+#endif
+                                  , 0)) == INVALID_SOCKET) {
                        fprintf(stderr, "failed to create socket: %s\n", 
strerror(errno));
                        exit(1);
                }
-#ifdef HAVE_FCNTL
-               fcntl(sock, F_SETFD, FD_CLOEXEC);
+#if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
+               (void) fcntl(sock, F_SETFD, FD_CLOEXEC);
 #endif
 
                setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof 
on);
@@ -244,13 +259,13 @@ main(int argc, char **argv)
                }
 
                listen(sock, 1);
-               if ((s = accept(sock, (SOCKPTR)0, (socklen_t *)0)) == 
INVALID_SOCKET) {
+               if ((s = accept4(sock, (SOCKPTR)0, (socklen_t *)0, 
SOCK_CLOEXEC)) == INVALID_SOCKET) {
                        fprintf(stderr, "failed to accept connection: %s\n",
                                        strerror(errno));
                        exit(1);
                }
-#ifdef HAVE_FCNTL
-               fcntl(s, F_SETFD, FD_CLOEXEC);
+#if defined(HAVE_FCNTL) && (!defined(SOCK_CLOEXEC) || !defined(HAVE_ACCEPT4))
+               (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
        }
 
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2364,7 +2364,11 @@ mapi_reconnect(Mapi mid)
                        return mapi_setError(mid, "path name too long", 
"mapi_reconnect", MERROR);
                }
 
-               if ((s = socket(PF_UNIX, SOCK_STREAM, 0)) == INVALID_SOCKET) {
+               if ((s = socket(PF_UNIX, SOCK_STREAM
+#ifdef SOCK_CLOEXEC
+                               | SOCK_CLOEXEC
+#endif
+                               , 0)) == INVALID_SOCKET) {
                        snprintf(errbuf, sizeof(errbuf),
                                 "opening socket failed: %s",
 #ifdef _MSC_VER
@@ -2375,7 +2379,7 @@ mapi_reconnect(Mapi mid)
                                );
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
-#ifdef HAVE_FCNTL
+#if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
                (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
                memset(&userver, 0, sizeof(struct sockaddr_un));
@@ -2441,10 +2445,14 @@ mapi_reconnect(Mapi mid)
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
                for (rp = res; rp; rp = rp->ai_next) {
-                       s = socket(rp->ai_family, rp->ai_socktype, 
rp->ai_protocol);
+                       s = socket(rp->ai_family, rp->ai_socktype
+#ifdef SOCK_CLOEXEC
+                                  | SOCK_CLOEXEC
+#endif
+                                  , rp->ai_protocol);
                        if (s == INVALID_SOCKET)
                                continue;
-#ifdef HAVE_FCNTL
+#if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
                        (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
                        if (connect(s, rp->ai_addr, (socklen_t) rp->ai_addrlen) 
!= SOCKET_ERROR)
@@ -2485,7 +2493,11 @@ mapi_reconnect(Mapi mid)
                memcpy(&server.sin_addr, hp->h_addr_list[0], hp->h_length);
                server.sin_family = hp->h_addrtype;
                server.sin_port = htons((unsigned short) (mid->port & 0xFFFF));
-               s = socket(server.sin_family, SOCK_STREAM, IPPROTO_TCP);
+               s = socket(server.sin_family, SOCK_STREAM
+#ifdef SOCK_CLOEXEC
+                          | SOCK_CLOEXEC
+#endif
+                          , IPPROTO_TCP);
 
                if (s == INVALID_SOCKET) {
                        snprintf(errbuf, sizeof(errbuf), "opening socket 
failed: %s",
@@ -2497,7 +2509,7 @@ mapi_reconnect(Mapi mid)
                                );
                        return mapi_setError(mid, errbuf, "mapi_reconnect", 
MERROR);
                }
-#ifdef HAVE_FCNTL
+#if !defined(SOCK_CLOEXEC) && defined(HAVE_FCNTL)
                (void) fcntl(s, F_SETFD, FD_CLOEXEC);
 #endif
 
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2606,6 +2606,7 @@ AC_FUNC_FSEEKO
 save_LIBS="$LIBS"
 LIBS="$LIBS $MATH_LIBS"
 AC_CHECK_FUNCS([\
+       accept4 \
        asctime_r \
        backtrace \
        cbrt \
@@ -2627,6 +2628,7 @@ AC_CHECK_FUNCS([\
        mremap \
        nl_langinfo \
        _NSGetExecutablePath \
+       pipe2 \
        popen \
        posix_fadvise \
        posix_fallocate \
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -1115,8 +1115,8 @@ fcnHeader(Client cntxt, int kind)
        cntxt->backup = cntxt->curprg;
        cntxt->curprg = newFunction( modnme, fnme, kind);
        if(cntxt->curprg == NULL) {
+               cntxt->curprg = cntxt->backup;
                parseError(cntxt, SQLSTATE(HY001) MAL_MALLOC_FAIL);
-               cntxt->curprg = cntxt->backup;
                return 0;
        }
        cntxt->curprg->def->errors = cntxt->backup->def->errors;
@@ -1559,7 +1559,7 @@ parseAssign(Client cntxt, int cntrl)
                                pushInstruction(curBlk, curInstr);
                                return;
                        }
-                       GETvariable((void) 0);
+                       GETvariable(freeInstruction(curInstr));
                        if (currChar(cntxt) == ':') {
                                setVarUDFtype(curBlk, varid);
                                type = typeElm(cntxt, getVarType(curBlk, 
varid));
@@ -1611,7 +1611,7 @@ parseAssign(Client cntxt, int cntrl)
                }
 
                /* Get target variable details*/
-               GETvariable((void) 0);
+               GETvariable(freeInstruction(curInstr));
                if (!(currChar(cntxt) == ':' && CURRENT(cntxt)[1] == '=')) {
                        curInstr->argv[0] = varid;
                        if (currChar(cntxt) == ':') {
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -2215,7 +2215,7 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
                                        }
                                } else {
                                        len = strlen(v);
-                                       if (len >= maxlen) {
+                                       if (len + 7 >= maxlen) {
                                                maxlen += len + BUFSIZ;
                                                buf2 = GDKrealloc(buf, maxlen);
                                                if (buf2 == NULL) {
@@ -2226,10 +2226,10 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, 
                                        }
                                        switch (b->ttype) {
                                        case TYPE_str:
-                                               len = snprintf(buf, maxlen, "[ 
\"%s\" ]", v);
+                                               snprintf(buf, maxlen, "[ \"%s\" 
]", v);
                                                break;
                                        case TYPE_dbl:
-                                               len = snprintf(buf, maxlen, "[ 
%s ]", v);
+                                               snprintf(buf, maxlen, "[ %s ]", 
v);
                                                break;
                                        }
                                }
diff --git a/monetdb5/modules/mal/language.c b/monetdb5/modules/mal/language.c
--- a/monetdb5/modules/mal/language.c
+++ b/monetdb5/modules/mal/language.c
@@ -195,7 +195,7 @@ CMDregisterFunction(Client cntxt, MalBlk
                fcnName = putName(*fcn);
                modName = putName(*mod);
                ahelp = GDKstrdup(*help);
-               if(fcnName == NULL || modName == NULL || help == NULL) {
+               if(fcnName == NULL || modName == NULL || ahelp == NULL) {
                        freeSymbol(sym);
                        GDKfree(ahelp);
                        throw(MAL, "language.register", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
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
@@ -72,6 +72,10 @@
 #define SOCKLEN int
 #endif
 
+#if !defined(HAVE_ACCEPT4) || !defined(SOCK_CLOEXEC)
+#define accept4(sockfd, addr, addrlen, flags)  accept(sockfd, addr, addrlen)
+#endif
+
 static char seedChars[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
        'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
        'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
@@ -353,7 +357,7 @@ SERVERlistenThread(SOCKET *Sock)
                        continue;
                }
                if (sock != INVALID_SOCKET && FD_ISSET(sock, &fds)) {
-                       if ((msgsock = accept(sock, (SOCKPTR)0, (socklen_t 
*)0)) == INVALID_SOCKET) {
+                       if ((msgsock = accept4(sock, (SOCKPTR)0, (socklen_t 
*)0, SOCK_CLOEXEC)) == INVALID_SOCKET) {
                                if (
 #ifdef _MSC_VER
                                        WSAGetLastError() != WSAEINTR
@@ -366,7 +370,7 @@ SERVERlistenThread(SOCKET *Sock)
                                }
                                continue;
                        }
-#ifdef HAVE_FCNTL
+#if defined(HAVE_FCNTL) && (!defined(SOCK_CLOEXEC) || !defined(HAVE_ACCEPT4))
                        (void) fcntl(msgsock, F_SETFD, FD_CLOEXEC);
 #endif
 #ifdef HAVE_SYS_UN_H
@@ -378,7 +382,7 @@ SERVERlistenThread(SOCKET *Sock)
                        char ccmsg[CMSG_SPACE(sizeof(int))];
                        struct cmsghdr *cmsg;
 
-                       if ((msgsock = accept(usock, (SOCKPTR)0, (socklen_t 
*)0)) == INVALID_SOCKET) {
+                       if ((msgsock = accept4(usock, (SOCKPTR)0, (socklen_t 
*)0, SOCK_CLOEXEC)) == INVALID_SOCKET) {
                                if (
 #ifdef _MSC_VER
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to