postgresql/src/backend/storage/ipc
Robert Haas 24ecde7742 Work around unfortunate getppid() behavior on BSD-ish systems.
On MacOS X, and apparently also on other BSD-derived systems, attaching
a debugger causes getppid() to return the pid of the debugging process
rather than the actual parent PID.  As a result, debugging the
autovacuum launcher, startup process, or WAL sender on such systems
causes it to exit, because the previous coding of PostmasterIsAlive()
detects postmaster death by testing whether getppid() == PostmasterPid.

Work around that behavior by checking the return value of getppid()
more carefully.  If it's PostmasterPid, the postmaster must be alive;
if it's 1, assume the postmaster is dead.  If it's any other value,
assume we've been debugged and fall through to the less-reliable
kill() test.

Review by Tom Lane.
2010-12-21 06:30:32 -05:00
..
ipc.c Use symbolic names not octal constants for file permission flags. 2010-12-10 17:35:33 -05:00
ipci.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
Makefile Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
pmsignal.c Work around unfortunate getppid() behavior on BSD-ish systems. 2010-12-21 06:30:32 -05:00
procarray.c Optimize commit_siblings in two ways to improve group commit. 2010-12-08 18:48:03 +00:00
procsignal.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
README Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00
shmem.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
shmqueue.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
sinval.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
sinvaladt.c Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
standby.c Try to save a kernel call in ResolveRecoveryConflictWithVirtualXIDs. 2010-12-17 11:32:02 -05:00

src/backend/storage/ipc/README

Cache Invalidation Synchronization Routines
===========================================

Mon Jul 18 11:09:22 PDT 1988  W.KLAS

The cache synchronization is done using a message queue. Every
backend can register a message which then has to be read by
all backends. A message read by all backends is removed from the
queue automatically. If a message has been lost because the buffer
was full, all backends that haven't read this message will be
told that they have to reset their cache state. This is done
at the time when they try to read the message queue.

The message queue is implemented as a shared buffer segment. Actually,
the queue is a circle to allow fast inserting, reading (invalidate data) and
maintaining the buffer.