diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-05-29 22:48:23 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-05-29 22:48:23 +0000 |
commit | 076a055acf3c55314de267c62b03191586d79cf6 (patch) | |
tree | 1bfb8a8755cd393c6615bd55a7a4bb7ad404781c /src/backend/storage/ipc/pmsignal.c | |
parent | d531fd2cdc819e7ca026c2ab9e65a7f7c49b1906 (diff) | |
download | postgresql-076a055acf3c55314de267c62b03191586d79cf6.tar.gz postgresql-076a055acf3c55314de267c62b03191586d79cf6.zip |
Separate out bgwriter code into a logically separate module, rather
than being random pieces of other files. Give bgwriter responsibility
for all checkpoint activity (other than a post-recovery checkpoint);
so this child process absorbs the functionality of the former transient
checkpoint and shutdown subprocesses. While at it, create an actual
include file for postmaster.c, which for some reason never had its own
file before.
Diffstat (limited to 'src/backend/storage/ipc/pmsignal.c')
-rw-r--r-- | src/backend/storage/ipc/pmsignal.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/backend/storage/ipc/pmsignal.c b/src/backend/storage/ipc/pmsignal.c index b0fc1aea0ff..4efa4adac6f 100644 --- a/src/backend/storage/ipc/pmsignal.c +++ b/src/backend/storage/ipc/pmsignal.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/ipc/pmsignal.c,v 1.13 2004/02/08 22:28:56 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/storage/ipc/pmsignal.c,v 1.14 2004/05/29 22:48:20 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -83,3 +83,41 @@ CheckPostmasterSignal(PMSignalReason reason) } return false; } + +/* + * PostmasterIsAlive - check whether postmaster process is still alive + * + * amDirectChild should be passed as "true" by code that knows it is + * executing in a direct child process of the postmaster; pass "false" + * if an indirect child or not sure. The "true" case uses a faster and + * more reliable test, so use it when possible. + */ +bool +PostmasterIsAlive(bool amDirectChild) +{ +#ifndef WIN32 + if (amDirectChild) + { + /* + * If the postmaster is alive, we'll still be its child. If it's + * died, we'll be reassigned as a child of the init process. + */ + return (getppid() == PostmasterPid); + } + else + { + /* + * Use kill() to see if the postmaster is still alive. This can + * sometimes give a false positive result, since the postmaster's PID + * may get recycled, but it is good enough for existing uses by + * indirect children. + */ + return (kill(PostmasterPid, 0) == 0); + } +#else /* WIN32 */ + /* + * XXX needs to be implemented by somebody + */ + return true; +#endif /* WIN32 */ +} |