Update of /cvsroot/monetdb/MonetDB5/src/tools
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11861

Modified Files:
        merovingian.mx 
Log Message:
- Don't try to start a database under maintenance.
- Inheritance from your parent sometimes sucks.  Make sure that the
  listening socket of Merovingian isn't being kept by child mservers
  that aren't stopped when Merovingian shuts down.


Index: merovingian.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/tools/merovingian.mx,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- merovingian.mx      29 Aug 2007 08:59:05 -0000      1.32
+++ merovingian.mx      29 Aug 2007 09:47:28 -0000      1.33
@@ -358,7 +358,7 @@
  * forbidden by restart policy. (TODO)
  */
 static err
-forkMserver(str database, sabdb** stats, dpair dp)
+forkMserver(str database, sabdb** stats, dpair dp, int sock)
 {
        pid_t pid;
        str er;
@@ -431,6 +431,7 @@
                break;
                case SABdbMaintenance:
                        merlog("database '%s' is under maintenance", database);
+                       return(NO_ERR);
                break;
                default:
                        SABAOTHfreeStatus(stats);
@@ -465,6 +466,9 @@
                dup2(pfde[1], 2);
                close(pfde[1]);
 
+               /* we don't want the listening socket of the parent */
+               close(sock);
+
                /* we don't use stdin, neither should mserver ... */
                close(0);
 
@@ -696,7 +700,7 @@
                        return(newErr("no database running, and no database 
specified"));
                }
        } else {
-               err e = forkMserver(database, &top, dp);
+               err e = forkMserver(database, &top, dp, sock);
                if (e != NO_ERR) {
                        if (top == NULL) {
                                stream_printf(fout, "!no such database '%s', 
please create it first\n", database);
@@ -854,10 +858,12 @@
                        freeErr(e);
                }
        } while (_keepListening);
+       shutdown(sock, SHUT_RDWR);
        close(sock);
        return(NO_ERR);
 
 error:
+       shutdown(sock, SHUT_RDWR);
        close(sock);
        return(newErr("accept connection: %s", msg));
 }
@@ -1104,7 +1110,7 @@
        e = openConnection(&sock, MEROV_PORT);
        if (e == NO_ERR) {
                for (argp = 1; argp < argc; argp++) {
-                       e = forkMserver(argv[argp], &stats, d);
+                       e = forkMserver(argv[argp], &stats, d, sock);
                        if (e != NO_ERR) {
                                fprintf(stderr, "failed to fork mserver: %s\n", 
getErrMsg(e));
                                freeErr(e);


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins

Reply via email to