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