Remove fork()/exec() and only do fork(). Small cleanups.
authorBruce Momjian
Fri, 29 May 1998 17:00:34 +0000 (17:00 +0000)
committerBruce Momjian
Fri, 29 May 1998 17:00:34 +0000 (17:00 +0000)
19 files changed:
src/backend/bootstrap/bootstrap.c
src/backend/executor/execQual.c
src/backend/libpq/pqcomm.c
src/backend/port/dynloader/bsdi.h
src/backend/postmaster/postmaster.c
src/backend/storage/ipc/ipc.c
src/backend/storage/ipc/ipci.c
src/backend/storage/smgr/mm.c
src/backend/storage/smgr/smgr.c
src/backend/tcop/postgres.c
src/backend/utils/error/excabort.c
src/backend/utils/init/globals.c
src/backend/utils/init/miscinit.c
src/backend/utils/init/postinit.c
src/include/libpq/libpq.h
src/include/miscadmin.h
src/include/storage/ipc.h
src/include/tcop/tcopprot.h
src/interfaces/Makefile

index f41187c0504c38280678e3fb3477acfb0350cea4..d2e6fff5bbdf62e93f1e34ee0d33b53f4b52594e 100644 (file)
@@ -7,7 +7,7 @@
  * Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.41 1998/05/19 18:05:44 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.42 1998/05/29 17:00:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -382,7 +382,7 @@ BootstrapMain(int argc, char *argv[])
     *  initialize input fd
     * ----------------
     */
-   if (IsUnderPostmaster == true && portFd < 0)
+   if (IsUnderPostmaster && portFd < 0)
    {
        fputs("backend: failed, no -P option with -postmaster opt.\n", stderr);
        exitpg(1);
index a4988e407c0e02ccf70d53fdd5df28e3de56499c..34193990db09120f7d12d4451bcc139021fb5b76 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.31 1998/04/27 04:05:35 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.32 1998/05/29 17:00:06 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -671,7 +671,7 @@ ExecMakeFunctionResult(Node *node,
                       bool *isNull,
                       bool *isDone)
 {
-   Datum       argv[MAXFMGRARGS];
+   Datum       argV[MAXFMGRARGS];
    FunctionCachePtr fcache;
    Func       *funcNode = NULL;
    Oper       *operNode = NULL;
@@ -699,7 +699,7 @@ ExecMakeFunctionResult(Node *node,
     *  arguments is a list of expressions to evaluate
     *  before passing to the function manager.
     *  We collect the results of evaluating the expressions
-    *  into a datum array (argv) and pass this array to arrayFmgr()
+    *  into a datum array (argV) and pass this array to arrayFmgr()
     * ----------------
     */
    if (fcache->nargs != 0)
@@ -718,11 +718,11 @@ ExecMakeFunctionResult(Node *node,
         */
        if ((fcache->hasSetArg) && fcache->setArg != NULL)
        {
-           argv[0] = (Datum) fcache->setArg;
+           argV[0] = (Datum) fcache->setArg;
            argDone = false;
        }
        else
-           ExecEvalFuncArgs(fcache, econtext, arguments, argv, &argDone);
+           ExecEvalFuncArgs(fcache, econtext, arguments, argV, &argDone);
 
        if ((fcache->hasSetArg) && (argDone))
        {
@@ -745,7 +745,7 @@ ExecMakeFunctionResult(Node *node,
     * which defines this set.  So replace the existing funcid in the
     * funcnode with the set's OID.  Also, we want a new fcache which
     * points to the right function, so get that, now that we have the
-    * right OID.  Also zero out the argv, since the real set doesn't take
+    * right OID.  Also zero out the argV, since the real set doesn't take
     * any arguments.
     */
    if (((Func *) node)->funcid == F_SETEVAL)
@@ -753,18 +753,18 @@ ExecMakeFunctionResult(Node *node,
        funcisset = true;
        if (fcache->setArg)
        {
-           argv[0] = 0;
+           argV[0] = 0;
 
            ((Func *) node)->funcid = (Oid) PointerGetDatum(fcache->setArg);
 
        }
        else
        {
-           ((Func *) node)->funcid = (Oid) argv[0];
-           setFcache(node, argv[0], NIL, econtext);
+           ((Func *) node)->funcid = (Oid) argV[0];
+           setFcache(node, argV[0], NIL, econtext);
            fcache = ((Func *) node)->func_fcache;
-           fcache->setArg = (char *) argv[0];
-           argv[0] = (Datum) 0;
+           fcache->setArg = (char *) argV[0];
+           argV[0] = (Datum) 0;
        }
    }
 
@@ -778,7 +778,7 @@ ExecMakeFunctionResult(Node *node,
        Datum       result;
 
        Assert(funcNode);
-       result = postquel_function(funcNode, (char **) argv, isNull, isDone);
+       result = postquel_function(funcNode, (char **) argV, isNull, isDone);
 
        /*
         * finagle the situation where we are iterating through all
@@ -791,7 +791,7 @@ ExecMakeFunctionResult(Node *node,
        {
            bool        argDone;
 
-           ExecEvalFuncArgs(fcache, econtext, arguments, argv, &argDone);
+           ExecEvalFuncArgs(fcache, econtext, arguments, argV, &argDone);
 
            if (argDone)
            {
@@ -801,7 +801,7 @@ ExecMakeFunctionResult(Node *node,
            }
            else
                result = postquel_function(funcNode,
-                                          (char **) argv,
+                                          (char **) argV,
                                           isNull,
                                           isDone);
        }
@@ -837,7 +837,7 @@ ExecMakeFunctionResult(Node *node,
            if (fcache->nullVect[i] == true)
                *isNull = true;
 
-       return ((Datum) fmgr_c(&fcache->func, (FmgrValues *) argv, isNull));
+       return ((Datum) fmgr_c(&fcache->func, (FmgrValues *) argV, isNull));
    }
 }
 
index 7dca3d567e581bc9aa7a6fef043254ab06a498f9..4e1a2659ced3983a0947ce40210ea259eb435242 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.42 1998/05/27 18:32:01 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.43 1998/05/29 17:00:07 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -564,8 +564,8 @@ static char sock_path[MAXPGPATH + 1] = "";
 void
 StreamDoUnlink()
 {
-   if (sock_path[0])
-       unlink(sock_path);
+   Assert(sock_path[0]);
+   unlink(sock_path);
 }
 
 int
@@ -628,6 +628,9 @@ StreamServerPort(char *hostName, short portName, int *fdP)
        return (STATUS_ERROR);
    }
 
+   if (family == AF_UNIX)
+       on_exitpg(StreamDoUnlink, NULL);
+
    listen(fd, SOMAXCONN);
 
    /*
index 02d9c0aae8897b13f0f1e8caf3ffd79e00aa40d7..91a5331a8c9e909520c30989c5ddfbccde82a441 100644 (file)
@@ -20,7 +20,7 @@
 
 #ifndef  PRE_BSDI_2_1
 #include 
-#define          pg_dlopen(f)    dlopen(f, 1)
+#define          pg_dlopen(f)    dlopen(f, RTLD_LAZY)
 #define          pg_dlsym        dlsym
 #define          pg_dlclose      dlclose
 #define          pg_dlerror      dlerror
index 59b3007bd5361c5843fd35e661e4f2b63a62b229..81b789de51fdbe14acfd3f2729b2d494efca9231 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.77 1998/05/27 18:32:02 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.78 1998/05/29 17:00:09 momjian Exp $
  *
  * NOTES
  *
@@ -82,6 +82,8 @@
 #include "miscadmin.h"
 #include "version.h"
 #include "lib/dllist.h"
+#include "tcop/tcopprot.h"
+#include "commands/async.h"
 #include "nodes/nodes.h"
 #include "utils/mcxt.h"
 #include "storage/proc.h"
 #endif
 #include "storage/fd.h"
 
-#if defined(DBX_VERSION)
-#define FORK() (0)
-#else
-#ifndef HAVE_VFORK
-#define FORK() fork()
-#else
-#define FORK() vfork()
-#endif
-#endif
-
 #if !defined(MAXINT)
 #define MAXINT        INT_MAX
 #endif
@@ -165,6 +157,7 @@ static IpcMemoryKey ipc_key;
 
 static int NextBackendId = MAXINT;     /* XXX why? */
 static char *progname = (char *) NULL;
+static char **argv_name;
 
 /*
  * Default Values
@@ -192,6 +185,19 @@ static int SendStop = false;
 static bool    NetServer = false;      /* if not zero, postmaster listen for
                                 * non-local connections */
 
+
+/*
+ * GH: For !HAVE_SIGPROCMASK (NEXTSTEP), TRH implemented an
+ * alternative interface.
+ */
+#ifdef HAVE_SIGPROCMASK
+static sigset_t    oldsigmask,
+               newsigmask;
+#else
+static int         orgsigmask = sigblock(0);
+#endif
+
+                                
 /*
  * postmaster.c - function prototypes
  */
@@ -202,7 +208,7 @@ static void pmdie(SIGNAL_ARGS);
 static void reaper(SIGNAL_ARGS);
 static void dumpstatus(SIGNAL_ARGS);
 static void CleanupProc(int pid, int exitstatus);
-static int DoExec(Port *port);
+static int DoBackend(Port *port);
 static void ExitPostmaster(int status);
 static void usage(const char *);
 static int ServerLoop(void);
@@ -284,7 +290,6 @@ int
 PostmasterMain(int argc, char *argv[])
 {
    extern int  NBuffers;       /* from buffer/bufmgr.c */
-   extern bool IsPostmaster;   /* from smgr/mm.c */
    int         opt;
    char       *hostName;
    int         status;
@@ -293,9 +298,8 @@ PostmasterMain(int argc, char *argv[])
    char        hostbuf[MAXHOSTNAMELEN];
 
    progname = argv[0];
-
-   IsPostmaster = true;
-
+   argv_name = &argv[0];
+   
    /*
     * for security, no dir or file created can be group or other
     * accessible
@@ -531,26 +535,14 @@ ServerLoop(void)
    int         nSockets;
    Dlelem     *curr;
 
-   /*
-    * GH: For !HAVE_SIGPROCMASK (NEXTSTEP), TRH implemented an
-    * alternative interface.
-    */
-#ifdef HAVE_SIGPROCMASK
-   sigset_t    oldsigmask,
-               newsigmask;
-
-#else
-   int         orgsigmask = sigblock(0);
-
-#endif
-
    nSockets = initMasks(&readmask, &writemask);
 
 #ifdef HAVE_SIGPROCMASK
-   sigprocmask(0, 0, &oldsigmask);
+   sigprocmask(0, NULL, &oldsigmask);
    sigemptyset(&newsigmask);
    sigaddset(&newsigmask, SIGCHLD);
 #endif
+
    for (;;)
    {
        Port       *port;
@@ -1048,13 +1040,17 @@ BackendStartup(Port *port)
        fprintf(stderr, "-----------------------------------------\n");
    }
 
-   if ((pid = FORK()) == 0)
-   {                           /* child */
-       if (DoExec(port))
-           fprintf(stderr, "%s child[%d]: BackendStartup: execv failed\n",
-                   progname, pid);
-       /* use _exit to keep from double-flushing stdio */
-       _exit(1);
+    if ((pid = fork()) == 0)
+   {  /* child */
+        if (DoBackend(port))
+       {
+            fprintf(stderr, "%s child[%d]: BackendStartup: backend startup failed\n",
+                    progname, pid);
+           /* use _exit to keep from double-flushing stdio */
+           _exit(1);
+       }
+       else
+           _exit(0);
    }
 
    /* in parent */
@@ -1123,19 +1119,14 @@ split_opts(char **argv, int *argcp, char *s)
 }
 
 /*
- * DoExec -- set up the argument list and perform an execv system call
- *
- * Tries fairly hard not to dork with anything that isn't automatically
- * allocated so we don't do anything weird to the postmaster when it gets
- * its thread back.  (This is vfork() we're talking about.  If we're using
- * fork() because we don't have vfork(), then we don't really care.)
+ * DoBackend -- set up the argument list and perform an execv system call
  *
- * returns:
- *     Shouldn't return at all.
- *     If execv() fails, return status.
+ * returns: 
+ *      Shouldn't return at all.
+ *      If execv() fails, return status.
  */
 static int
-DoExec(Port *port)
+DoBackend(Port *port)
 {
    char        execbuf[MAXPATHLEN];
    char        portbuf[ARGV_SIZE];
@@ -1154,9 +1145,58 @@ DoExec(Port *port)
    int         ac = 0;
    int         i;
 
+   /*
+    *  Let's clean up ourselves as the postmaster child
+    */
+   
+   clear_exitpg(); /* we don't want the postmaster's exitpg() handlers */
+
+   /* ----------------
+    *  register signal handlers.
+    *  Thanks to the postmaster, these are currently blocked.
+    * ----------------
+    */
+   pqsignal(SIGINT, die);
+
+   pqsignal(SIGHUP, die);
+   pqsignal(SIGTERM, die);
+   pqsignal(SIGPIPE, die);
+   pqsignal(SIGUSR1, quickdie);
+   pqsignal(SIGUSR2, Async_NotifyHandler);
+   pqsignal(SIGFPE, FloatExceptionHandler);
+
+   pqsignal(SIGCHLD, SIG_DFL);
+   pqsignal(SIGTTIN, SIG_DFL);
+   pqsignal(SIGTTOU, SIG_DFL);
+   pqsignal(SIGCONT, SIG_DFL);
+
+   /* OK, let's unblock our signals, all together now... */
+   sigprocmask(SIG_SETMASK, &oldsigmask, 0);
+
+   /* Close the postmater sockets */
+   if (NetServer)
+       StreamClose(ServerSock_INET);
+   StreamClose(ServerSock_UNIX);
+   
+   /* Now, on to standard postgres stuff */
+   
+   MyProcPid = getpid();
+
    strncpy(execbuf, Execfile, MAXPATHLEN - 1);
    av[ac++] = execbuf;
 
+   /*
+    *  We need to set our argv[0] to an absolute path name because
+    *  some OS's use this for dynamic loading, like BSDI.  Without it,
+    *  when we change directories to the database dir, the dynamic
+    *  loader can't find the base executable and fails.
+    *  Another advantage is that this changes the 'ps' displayed
+    *  process name on some platforms.  It does on BSDI.  That's
+    *  a big win.
+    */
+   
+   *argv_name = Execfile;
+
    /* Tell the backend it is being called from the postmaster */
    av[ac++] = "-p";
 
@@ -1195,7 +1235,7 @@ DoExec(Port *port)
 
    /* Tell the backend what protocol the frontend is using. */
 
-   sprintf(protobuf, "-v %u", port->proto);
+   sprintf(protobuf, "-v%u", port->proto);
    av[ac++] = protobuf;
 
    StrNCpy(dbbuf, port->database, ARGV_SIZE);
@@ -1205,14 +1245,14 @@ DoExec(Port *port)
 
    if (DebugLvl > 1)
    {
-       fprintf(stderr, "%s child[%ld]: execv(",
-               progname, (long) MyProcPid);
+       fprintf(stderr, "%s child[%d]: starting with (",
+               progname, MyProcPid);
        for (i = 0; i < ac; ++i)
            fprintf(stderr, "%s, ", av[i]);
        fprintf(stderr, ")\n");
    }
 
-   return (execv(av[0], av));
+    return(PostgresMain(ac, av));
 }
 
 /*
@@ -1228,9 +1268,9 @@ ExitPostmaster(int status)
     * the backends all be killed? probably not.
     */
    if (ServerSock_INET != INVALID_SOCK)
-       close(ServerSock_INET);
+       StreamClose(ServerSock_INET);
    if (ServerSock_UNIX != INVALID_SOCK)
-       close(ServerSock_UNIX);
+       StreamClose(ServerSock_UNIX);
    exitpg(status);
 }
 
index 28fbd87a99de3501b940bb301007807845fface0..768b144ff56bae6f3877e463655c556e7375813a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipc.c,v 1.20 1998/03/02 05:41:55 scrappy Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipc.c,v 1.21 1998/05/29 17:00:10 momjian Exp $
  *
  * NOTES
  *
@@ -137,7 +137,6 @@ exitpg(int code)
    for (i = onexit_index - 1; i >= 0; --i)
        (*onexit_list[i].function) (code, onexit_list[i].arg);
 
-   StreamDoUnlink();
    exit(code);
 }
 
@@ -168,7 +167,9 @@ quasi_exitpg()
     * ----------------
     */
    for (i = onexit_index - 1; i >= 0; --i)
-       (*onexit_list[i].function) (0, onexit_list[i].arg);
+       /* Don't do StreamDoUnlink on quasi_exit */
+       if (onexit_list[i].function != StreamDoUnlink)
+           (*onexit_list[i].function) (0, onexit_list[i].arg);
 
    onexit_index = 0;
    exitpg_inprogress = 0;
@@ -182,7 +183,7 @@ quasi_exitpg()
  * ----------------------------------------------------------------
  */
 int
-           on_exitpg(void (*function) (), caddr_t arg)
+on_exitpg(void (*function) (), caddr_t arg)
 {
    if (onexit_index >= MAX_ON_EXITS)
        return (-1);
@@ -195,6 +196,18 @@ int
    return (0);
 }
 
+/* ----------------------------------------------------------------
+ *     clear_exitpg
+ *
+ *     this function clears all exitpg() registered functions.
+ * ----------------------------------------------------------------
+ */
+void
+clear_exitpg(void)
+{
+   onexit_index = 0;
+}
+
 /****************************************************************************/
 /*  IPCPrivateSemaphoreKill(status, semId)                                 */
 /*                                                                         */
index b6740b524d7fa7dd812c61802ab9d8ccee4b8d50..4da60cb9ac99ac943706755b88a93df4114c53fa 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipci.c,v 1.7 1997/09/08 02:28:48 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipci.c,v 1.8 1998/05/29 17:00:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -101,7 +101,7 @@ CreateSharedMemoryAndSemaphores(IPCKey key)
     * ----------------
     */
    InitProcGlobal(key);
-   on_exitpg(ProcFreeAllSemaphores, 0);
+   on_exitpg(ProcFreeAllSemaphores, NULL);
 
    CreateSharedInvalidationState(key);
 }
index c666644ebc9769403593053bc4dcb81312b4ef36..265f9696ae482795babd343cce9ede7376ce848a 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.7 1997/09/18 20:21:53 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.8 1998/05/29 17:00:13 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -79,7 +79,6 @@ typedef struct MMRelHashEntry
 #define MMNRELATIONS   2
 
 SPINLOCK   MMCacheLock;
-extern bool IsPostmaster;
 extern Oid MyDatabaseId;
 
 static int *MMCurTop;
@@ -139,7 +138,7 @@ mminit()
        return (SM_FAIL);
    }
 
-   if (IsPostmaster)
+   if (IsUnderPostmaster) /* was IsPostmaster bjm */
    {
        MemSet(mmcacheblk, 0, mmsize);
        SpinRelease(MMCacheLock);
index c6956b30999d0f660319a1d9314fee1083f1ef3b..c0bdd94da654772b121f35f52aeea1b3944ad725 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.14 1998/04/01 15:35:33 scrappy Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.15 1998/05/29 17:00:14 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -100,7 +100,7 @@ smgrinit()
    }
 
    /* register the shutdown proc */
-   on_exitpg(smgrshutdown, 0);
+   on_exitpg(smgrshutdown, NULL);
 
    return (SM_SUCCESS);
 }
index c8cad2444c7e10dcdf27e615086e4cc17e567db7..b2fb3008e65196074b4c73ddc2163601c781b2c1 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.71 1998/05/27 18:32:03 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.72 1998/05/29 17:00:15 momjian Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -83,8 +83,6 @@
 #include "nodes/memnodes.h"
 #endif
 
-static void quickdie(SIGNAL_ARGS);
-
 /* ----------------
  *     global variables
  * ----------------
@@ -743,7 +741,7 @@ handle_warn(SIGNAL_ARGS)
    siglongjmp(Warn_restart, 1);
 }
 
-static void
+void
 quickdie(SIGNAL_ARGS)
 {
    elog(NOTICE, "Message from PostgreSQL backend:"
@@ -770,7 +768,7 @@ die(SIGNAL_ARGS)
 }
 
 /* signal handler for floating point exception */
-static void
+void
 FloatExceptionHandler(SIGNAL_ARGS)
 {
    elog(ERROR, "floating point exception!"
@@ -849,26 +847,6 @@ PostgresMain(int argc, char *argv[])
    extern char *optarg;
    extern short DebugLvl;
 
-   /* ----------------
-    *  register signal handlers.
-    * ----------------
-    */
-   pqsignal(SIGINT, die);
-
-   pqsignal(SIGHUP, die);
-   pqsignal(SIGTERM, die);
-   pqsignal(SIGPIPE, die);
-   pqsignal(SIGUSR1, quickdie);
-   pqsignal(SIGUSR2, Async_NotifyHandler);
-   pqsignal(SIGFPE, FloatExceptionHandler);
-
-   /* --------------------
-    *  initialize globals
-    * -------------------
-    */
-
-   MyProcPid = getpid();
-
    /* ----------------
     *  parse command line arguments
     * ----------------
@@ -915,6 +893,8 @@ PostgresMain(int argc, char *argv[])
            EuroDates = TRUE;
    }
 
+    optind = 1; /* reset after postmaster usage */
+   
    while ((flag = getopt(argc, argv, "B:bCD:d:Eef:iK:Lm:MNo:P:pQS:st:v:x:F"))
           != EOF)
        switch (flag)
@@ -1254,7 +1234,7 @@ PostgresMain(int argc, char *argv[])
     *  initialize portal file descriptors
     * ----------------
     */
-   if (IsUnderPostmaster == true)
+   if (IsUnderPostmaster)
    {
        if (Portfd < 0)
        {
@@ -1314,10 +1294,10 @@ PostgresMain(int argc, char *argv[])
     *  POSTGRES main processing loop begins here
     * ----------------
     */
-   if (IsUnderPostmaster == false)
+   if (!IsUnderPostmaster)
    {
        puts("\nPOSTGRES backend interactive interface");
-       puts("$Revision: 1.71 $ $Date: 1998/05/27 18:32:03 $");
+       puts("$Revision: 1.72 $ $Date: 1998/05/29 17:00:15 $");
    }
 
    /* ----------------
@@ -1327,7 +1307,7 @@ PostgresMain(int argc, char *argv[])
     * ----------------
     */
    if (!TransactionFlushEnabled())
-       on_exitpg(FlushBufferPool, (caddr_t) 0);
+       on_exitpg(FlushBufferPool, NULL);
 
    for (;;)
    {
index d87d57f2fef153a441743cde3ed6fab3a6a519ff..f956c42af01a29a289916874a95d17bfe3ebf48a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excabort.c,v 1.4 1997/09/08 21:49:03 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excabort.c,v 1.5 1998/05/29 17:00:16 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,10 +22,6 @@ ExcAbort(const Exception *excP,
         ExcData data,
         ExcMessage message)
 {
-#ifdef __SABER__
-   saber_stop();
-#else
    /* dump core */
    abort();
-#endif
 }
index f58a75ec8570fe3dec7046a35247fa712b5685b9..2deec81de00667235d76457ec8f040cdc5ac3145 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.22 1998/05/19 18:05:51 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.23 1998/05/29 17:00:18 momjian Exp $
  *
  * NOTES
  *   Globals used all over the place should be declared here and not
@@ -66,7 +66,6 @@ Oid           MyDatabaseId = InvalidOid;
 bool       TransactionInitWasProcessed = false;
 
 bool       IsUnderPostmaster = false;
-bool       IsPostmaster = false;
 
 short      DebugLvl = 0;
 
index b9a5062f483435c5fba9b3e19286ba8d291f791c..7f02bec61134a81464c5260fa118f7f4398247d5 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.14 1998/04/05 21:04:36 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.15 1998/05/29 17:00:19 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -84,9 +84,6 @@ unsigned char RecodeBackTable[128];
 void
 ExitPostgres(ExitStatus status)
 {
-#ifdef __SABER__
-   saber_stop();
-#endif
    exitpg(status);
 }
 
@@ -111,10 +108,6 @@ AbortPostgres()
 {
    char       *abortValue = getenv(EnableAbortEnvVarName);
 
-#ifdef __SABER__
-   saber_stop();
-#endif
-
    if (PointerIsValid(abortValue) && abortValue[0] != '\0')
        abort();
    else
index 76042390cc0fde1127727c0ec1d894b83b7a55eb..27bb849a08b296dfaaf584b29de93414868ed3b1 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.27 1998/04/05 21:04:43 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.28 1998/05/29 17:00:21 momjian Exp $
  *
  * NOTES
  *     InitPostgres() is the function called from PostgresMain
@@ -384,8 +384,11 @@ forcesharedmemory:
 
 #endif
 
-   PostgresIpcKey = key;
-   AttachSharedMemoryAndSemaphores(key);
+    if (!IsUnderPostmaster) /* postmaster already did this */
+   {
+       PostgresIpcKey = key;
+       AttachSharedMemoryAndSemaphores(key);
+   }
 }
 
 
index 6768626f988a615d829585e7bacf6d249d224669..61c8c9910dd5afa7f4fc1a696fd34ab35bfde8c2 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: libpq.h,v 1.14 1998/05/19 18:05:55 momjian Exp $
+ * $Id: libpq.h,v 1.15 1998/05/29 17:00:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -279,9 +279,9 @@ extern int  StreamOpen(char *hostName, short portName, Port *port);
 extern void pq_regoob(void (*fptr) ());
 extern void pq_unregoob(void);
 extern void pq_async_notify(void);
-extern int StreamServerPort(char *hostName, short portName, int *fdP);
-extern int StreamConnection(int server_fd, Port *port);
+extern void StreamDoUnlink();
+extern int StreamServerPort(char *hostName, short portName, int *fdP);
+extern int StreamConnection(int server_fd, Port *port);
 extern void StreamClose(int sock);
-extern void StreamDoUnlink(void);
 
 #endif                         /* LIBPQ_H */
index f5da6e628ab7501197ea7cee1db0eba19f1535fb..d7cee404c58e8c5f4c7a8c5101ff69399d24199a 100644 (file)
@@ -11,7 +11,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: miscadmin.h,v 1.23 1998/05/19 18:05:52 momjian Exp $
+ * $Id: miscadmin.h,v 1.24 1998/05/29 17:00:22 momjian Exp $
  *
  * NOTES
  *   some of the information in this file will be moved to
@@ -55,7 +55,6 @@ extern Oid    MyDatabaseId;
 extern bool TransactionInitWasProcessed;
 
 extern bool IsUnderPostmaster;
-extern bool IsPostmaster;
 
 extern short DebugLvl;
 
index cbd649234a714bc1385df59d5eec17b24a34712b..5bb8b45eb69259a6da2365efddb48bd3599a812c 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: ipc.h,v 1.24 1998/02/26 04:43:26 momjian Exp $
+ * $Id: ipc.h,v 1.25 1998/05/29 17:00:26 momjian Exp $
  *
  * NOTES
  *   This file is very architecture-specific.  This stuff should actually
@@ -73,7 +73,8 @@ typedef int IpcMemoryId;
 /* ipc.c */
 extern void exitpg(int code);
 extern void quasi_exitpg(void);
-extern int on_exitpg(void (*function) (), caddr_t arg);
+extern int on_exitpg(void (*function) (), caddr_t arg);
+extern void clear_exitpg(void);
 
 extern IpcSemaphoreId
 IpcSemaphoreCreate(IpcSemaphoreKey semKey,
index dbd9fdba740bafa9bbdaee02eeee6a00affa28f7..f20a14d0e2bc7510fad9c3ccd43b23136f861714 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: tcopprot.h,v 1.12 1998/05/19 18:05:58 momjian Exp $
+ * $Id: tcopprot.h,v 1.13 1998/05/29 17:00:28 momjian Exp $
  *
  * OLD COMMENTS
  *   This file was created so that other c files could get the two
@@ -33,9 +33,11 @@ pg_exec_query_dest(char *query_string, char **argv, Oid *typev,
 #endif                         /* BOOTSTRAP_HEADER */
 
 extern void handle_warn(SIGNAL_ARGS);
+extern void quickdie(SIGNAL_ARGS);
 extern void die(SIGNAL_ARGS);
+extern void FloatExceptionHandler(SIGNAL_ARGS);
 extern void CancelQuery(void);
-extern int PostgresMain(int argc, char *argv[]);
+extern int PostgresMain(int argc, char *argv[]);
 extern void ResetUsage(void);
 extern void ShowUsage(void);
 
index 13ae838c6b6334465ff5c30da9e169f406d1ef34..12b0306f08c89c093f2fe335841a68dc27f5b5bb 100644 (file)
@@ -7,7 +7,7 @@
 #
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/interfaces/Makefile,v 1.9 1998/03/05 13:18:51 scrappy Exp $
+#    $Header: /cvsroot/pgsql/src/interfaces/Makefile,v 1.10 1998/05/29 17:00:29 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -16,7 +16,7 @@ include $(SRCDIR)/Makefile.global
 
 .DEFAULT all:
    $(MAKE) -C libpq $@
-   $(MAKE) -C ecpg $@
+#  $(MAKE) -C ecpg $@
 ifeq ($(HAVE_Cplusplus), true)
    $(MAKE) -C libpq++ $@
 else