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