Changeset: 5083b232dd71 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5083b232dd71
Modified Files:
        gdk/gdk_bbp.c
        gdk/gdk_select.c
        tools/merovingian/daemon/argvcmds.c
        tools/merovingian/daemon/client.c
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/daemon/controlrunner.h
        tools/merovingian/daemon/discoveryrunner.c
        tools/merovingian/daemon/discoveryrunner.h
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/daemon/merovingian.h
        tools/merovingian/daemon/multiplex-funnel.c
        tools/merovingian/daemon/proxy.c
Branch: Dec2016
Log Message:

Merge with Jun2016 branch.


diffs (truncated from 740 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1210,7 +1210,10 @@ BBPheader(FILE *fp, oid *BBPoid, int *OI
            bbpversion != GDKLIBRARY_OLDWKB &&
            bbpversion != GDKLIBRARY_INSERTED &&
            bbpversion != GDKLIBRARY_HEADED) {
-               GDKfatal("BBPinit: incompatible BBP version: expected 0%o, got 
0%o.", GDKLIBRARY, bbpversion);
+               GDKfatal("BBPinit: incompatible BBP version: expected 0%o, got 
0%o.\n"
+                        "This database was probably created by %s version of 
MonetDB.",
+                        GDKLIBRARY, bbpversion,
+                        bbpversion > GDKLIBRARY ? "a newer" : "a too old");
        }
        if (fgets(buf, sizeof(buf), fp) == NULL) {
                GDKfatal("BBPinit: short BBP");
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -287,9 +287,10 @@ do {                                                       
\
                        }                               \
                }                                       \
        } else {                                        \
-               while (p <= q && o < e) {               \
+               while (p < q && o < e) {                \
                        p++;                            \
-                       CAND;                           \
+                       if (p < q)                      \
+                               CAND;                   \
                }                                       \
        }                                               \
 } while (0)
diff --git a/tools/merovingian/daemon/argvcmds.c 
b/tools/merovingian/daemon/argvcmds.c
--- a/tools/merovingian/daemon/argvcmds.c
+++ b/tools/merovingian/daemon/argvcmds.c
@@ -504,15 +504,16 @@ command_stop(confkeyval *ckv, int argc, 
        /* wait up to 5 seconds for monetdbd to actually stop */
        for (i = 0; i < 10; i++) {
                tv.tv_sec = 0;
-               tv.tv_usec = 500;
+               tv.tv_usec = 500000;
                select(0, NULL, NULL, NULL, &tv);
-               if (kill(daemon, 0) == -1)
-                       break;
-               if (i == 9) {
-                       /* done waiting, use harsher measures */
-                       kill(daemon, SIGKILL);
+               if (kill(daemon, 0) == -1) {
+                       /* daemon has died */
+                       return(0);
                }
        }
 
+       /* done waiting, use harsher measures */
+       kill(daemon, SIGKILL);
+
        return(0);
 }
diff --git a/tools/merovingian/daemon/client.c 
b/tools/merovingian/daemon/client.c
--- a/tools/merovingian/daemon/client.c
+++ b/tools/merovingian/daemon/client.c
@@ -411,7 +411,7 @@ handleClient(void *data)
                        free(algos);
                        self->dead = 1;
                        return(e);
-               };
+               }
        }
 
        msab_freeStatus(&top);
@@ -532,34 +532,35 @@ acceptConnections(int sock, int usock)
                        }
 
                        switch (*buf) {
-                               case '0':
-                                       /* nothing special, nothing to do */
+                       case '0':
+                               /* nothing special, nothing to do */
                                break;
-                               case '1':
-                                       /* filedescriptor, no way */
-                                       close(msgsock);
-                                       Mfprintf(stderr, "client error: fd 
passing not supported\n");
+                       case '1':
+                               /* filedescriptor, no way */
+                               close(msgsock);
+                               Mfprintf(stderr, "client error: fd passing not 
supported\n");
                                continue;
-                               default:
-                                       /* some unknown state */
-                                       close(msgsock);
-                                       Mfprintf(stderr, "client error: unknown 
initial byte\n");
+                       default:
+                               /* some unknown state */
+                               close(msgsock);
+                               Mfprintf(stderr, "client error: unknown initial 
byte\n");
                                continue;
                        }
                } else
                        continue;
                /* start handleClient as a thread so that we're not blocked by
                 * a slow client */
-               data = malloc(sizeof(*data));
+               data = malloc(sizeof(*data)); /* freed by handleClient */
                data->sock = msgsock;
                data->isusock = FD_ISSET(usock, &fds);
-               p = malloc(sizeof(*p)); /* freed by handleClient */
+               p = malloc(sizeof(*p));
                p->dead = 0;
                data->self = p;
                if (pthread_create(&p->tid, NULL, handleClient, data) == 0) {
                        p->next = threads;
                        threads = p;
                } else {
+                       close(msgsock);
                        free(data);
                        free(p);
                }
diff --git a/tools/merovingian/daemon/controlrunner.c 
b/tools/merovingian/daemon/controlrunner.c
--- a/tools/merovingian/daemon/controlrunner.c
+++ b/tools/merovingian/daemon/controlrunner.c
@@ -246,7 +246,6 @@ static void ctl_handle_client(
                        } else if (pos == -2) {
                                Mfprintf(_mero_ctlerr, "%s: time-out reading 
from "
                                                "control channel, disconnecting 
client\n", origin);
-                               close(msgsock);
                                break;
                        } else {
                                buf[pos] = '\0';
@@ -946,7 +945,7 @@ control_handleclient(const char *host, i
        ctl_handle_client(host, sock, fdin, fout);
 }
 
-void
+void *
 controlRunner(void *d)
 {
        int usock = *(int *)d;
@@ -999,6 +998,7 @@ controlRunner(void *d)
        shutdown(usock, SHUT_RDWR);
        close(usock);
        Mfprintf(_mero_ctlout, "control channel closed\n");
+       return NULL;
 }
 
 /* vim:set ts=4 sw=4 noexpandtab: */
diff --git a/tools/merovingian/daemon/controlrunner.h 
b/tools/merovingian/daemon/controlrunner.h
--- a/tools/merovingian/daemon/controlrunner.h
+++ b/tools/merovingian/daemon/controlrunner.h
@@ -13,7 +13,7 @@
 
 char control_authorise(const char *host, const char *chal, const char *algo, 
const char *passwd, stream *fout);
 void control_handleclient(const char *host, int sock, stream *fdin, stream 
*fdout);
-void controlRunner(void *d);
+void *controlRunner(void *d);
 
 #endif
 
diff --git a/tools/merovingian/daemon/discoveryrunner.c 
b/tools/merovingian/daemon/discoveryrunner.c
--- a/tools/merovingian/daemon/discoveryrunner.c
+++ b/tools/merovingian/daemon/discoveryrunner.c
@@ -276,7 +276,7 @@ unregisterMessageTap(int fd)
        pthread_mutex_unlock(&_mero_remotedb_lock);
 }
 
-void
+void *
 discoveryRunner(void *d)
 {
        int sock = *(int *)d;
@@ -329,7 +329,7 @@ discoveryRunner(void *d)
                                                "discovery services 
disabled\n", e);
                                free(e);
                                free(ckv);
-                               return;
+                               return NULL;
                        }
 
                        for (orig = stats; stats != NULL; stats = stats->next) {
@@ -509,7 +509,7 @@ discoveryRunner(void *d)
                                "discovery services disabled\n", e);
                free(e);
                free(ckv);
-               return;
+               return NULL;
        }
 
        /* craft LEAV messages for each db */
@@ -538,6 +538,7 @@ discoveryRunner(void *d)
        }
 
        free(ckv);
+       return NULL;
 }
 
 /* vim:set ts=4 sw=4 noexpandtab: */
diff --git a/tools/merovingian/daemon/discoveryrunner.h 
b/tools/merovingian/daemon/discoveryrunner.h
--- a/tools/merovingian/daemon/discoveryrunner.h
+++ b/tools/merovingian/daemon/discoveryrunner.h
@@ -16,7 +16,7 @@
 void broadcast(char *msg);
 void registerMessageTap(int fd);
 void unregisterMessageTap(int fd);
-void discoveryRunner(void *d);
+void *discoveryRunner(void *d);
 
 typedef struct _remotedb {
        char *dbname;       /* remote database name */
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -99,9 +99,9 @@ dpair _mero_topdp = NULL;
 /* lock to _mero_topdp, initialised as recursive lateron */
 pthread_mutex_t _mero_topdp_lock;
 /* for the logger, when set to 0, the logger terminates */
-int _mero_keep_logging = 1;
+volatile int _mero_keep_logging = 1;
 /* for accepting connections, when set to 0, listening socket terminates */
-char _mero_keep_listening = 1;
+volatile char _mero_keep_listening = 1;
 /* stream to where to write the log */
 FILE *_mero_logfile = NULL;
 /* stream to the stdout for the neighbour discovery service */
@@ -165,7 +165,7 @@ logFD(int fd, char *type, char *dbname, 
        fflush(stream);
 }
 
-static void
+static void *
 logListener(void *x)
 {
        dpair d = _mero_topdp;
@@ -204,7 +204,7 @@ logListener(void *x)
                }
 
                pthread_mutex_unlock(&_mero_topdp_lock);
-               
+
                if (select(nfds + 1, &readfds, NULL, NULL, &tv) <= 0) {
                        if (_mero_keep_logging != 0) {
                                continue;
@@ -230,6 +230,7 @@ logListener(void *x)
 
                fflush(_mero_logfile);
        } while (_mero_keep_logging);
+       return NULL;
 }
 
 /**
@@ -237,7 +238,7 @@ logListener(void *x)
  * shut down gracefully within a given time-out.  If that fails, it
  * sends the deadly SIGKILL signal to the mserver process and returns.
  */
-void
+void *
 terminateProcess(void *p)
 {
        dpair d = (dpair)p;
@@ -255,14 +256,14 @@ terminateProcess(void *p)
                                (long long int)pid, er);
                free(er);
                free(dbname);
-               return;
+               return NULL;
        }
 
        if (stats == NULL) {
                Mfprintf(stderr, "strange, process " LLFMT " serves database 
'%s' "
                                "which does not exist\n", (long long int)pid, 
dbname);
                free(dbname);
-               return;
+               return NULL;
        }
 
        switch (stats->state) {
@@ -275,14 +276,14 @@ terminateProcess(void *p)
                                        dbname, (long long int)pid);
                        msab_freeStatus(&stats);
                        free(dbname);
-                       return;
+                       return NULL;
                case SABdbInactive:
                        Mfprintf(stdout, "database '%s' appears to have shut 
down already\n",
                                        dbname);
                        fflush(stdout);
                        msab_freeStatus(&stats);
                        free(dbname);
-                       return;
+                       return NULL;
                case SABdbStarting:
                        Mfprintf(stderr, "database '%s' appears to be starting 
up\n",
                                         dbname);
@@ -292,20 +293,20 @@ terminateProcess(void *p)
                        Mfprintf(stderr, "unknown state: %d\n", 
(int)stats->state);
                        msab_freeStatus(&stats);
                        free(dbname);
-                       return;
+                       return NULL;
        }
 
        if (d->type == MEROFUN) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to