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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list