Changeset: e007ffa9cf13 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e007ffa9cf13
Modified Files:
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/daemon/forkmserver.c
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/daemon/merovingian.h
Branch: default
Log Message:

Merged from Aug2011


diffs (91 lines):

diff --git a/tools/merovingian/ChangeLog.Aug2011 
b/tools/merovingian/ChangeLog.Aug2011
--- a/tools/merovingian/ChangeLog.Aug2011
+++ b/tools/merovingian/ChangeLog.Aug2011
@@ -1,6 +1,10 @@
 # ChangeLog file for sql/src/backends/monet5/merovingian
 # This file is updated with mchangelog
 
+* Sun Oct  9 2011 Fabian Groffen <fab...@cwi.nl>
+- Resolved problem where monetdbd would terminate abnormally when
+  databases named 'control', 'discovery' or 'merovingian' were stopped.
+
 * Fri Oct  7 2011 Fabian Groffen <fab...@cwi.nl>
 - monetdbd get status now also reports the version of the running monetdbd
 
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
@@ -279,7 +279,7 @@ static void ctl_handle_client(int msgsoc
                                pthread_mutex_lock(&_mero_topdp_lock);
                                dp = _mero_topdp->next; /* don't need the 
console/log */
                                while (dp != NULL) {
-                                       if (strcmp(dp->dbname, q) == 0) {
+                                       if (dp->type == MERODB && 
strcmp(dp->dbname, q) == 0) {
                                                if (strcmp(p, "stop") == 0) {
                                                        terminateProcess(dp);
                                                        Mfprintf(_mero_ctlout, 
"%s: stopped "
diff --git a/tools/merovingian/daemon/forkmserver.c 
b/tools/merovingian/daemon/forkmserver.c
--- a/tools/merovingian/daemon/forkmserver.c
+++ b/tools/merovingian/daemon/forkmserver.c
@@ -345,6 +345,7 @@ forkMserver(char *database, sabdb** stat
                dp->err = pfde[0];
                close(pfde[1]);
                dp->next = NULL;
+               dp->type = MERODB;
                dp->pid = pid;
                dp->dbname = strdup(database);
 
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
@@ -861,6 +861,7 @@ main(int argc, char *argv[])
 
        _mero_topdp = &dpcons;
        _mero_topdp->pid = 0;
+       _mero_topdp->type = MERO;
        _mero_topdp->dbname = NULL;
 
        /* where should our msg output go to? */
@@ -902,6 +903,7 @@ main(int argc, char *argv[])
        close(pfd[1]);
 
        d->pid = getpid();
+       d->type = MERO;
        d->dbname = "merovingian";
 
        /* separate entry for the neighbour discovery service */
@@ -921,6 +923,7 @@ main(int argc, char *argv[])
        d->err = pfd[0];
        _mero_discerr = fdopen(pfd[1], "a");
        d->pid = getpid();
+       d->type = MERO;
        d->dbname = "discovery";
        d->next = NULL;
 
@@ -941,6 +944,7 @@ main(int argc, char *argv[])
        d->err = pfd[0];
        _mero_ctlerr = fdopen(pfd[1], "a");
        d->pid = getpid();
+       d->type = MERO;
        d->dbname = "control";
        d->next = NULL;
 
diff --git a/tools/merovingian/daemon/merovingian.h 
b/tools/merovingian/daemon/merovingian.h
--- a/tools/merovingian/daemon/merovingian.h
+++ b/tools/merovingian/daemon/merovingian.h
@@ -54,9 +54,15 @@ char *newErr(_In_z_ _Printf_format_strin
 void terminateProcess(void *p);
 void logFD(int fd, char *type, char *dbname, long long int pid, FILE *stream);
 
+typedef enum _mtype {
+       MERO = 1,
+       MERODB,
+} mtype;
+
 typedef struct _dpair {
        int out;          /* where to read stdout messages from */
        int err;          /* where to read stderr messages from */
+       mtype type;       /* type of process */
        pid_t pid;        /* this process' id */
        char *dbname;     /* the database that this server serves */
        struct _dpair* next;
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to