diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 2f67061c48b036d92d520ddbe7885115a6398461..f18fece398251bda4c66cd869a73b286974fdd1b 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.176 2004/02/10 01:55:24 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.177 2004/02/25 19:41:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -428,7 +428,7 @@ BootstrapMain(int argc, char *argv[])
 
 #ifdef EXEC_BACKEND
 	if (IsUnderPostmaster)
-		AttachSharedMemoryAndSemaphores();
+		CreateSharedMemoryAndSemaphores(false, MaxBackends, 0);
 #endif
 	XLOGPathInit();
 
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 9352aeb0ec03784414a0643acfe5c354f3416ab8..88af5d196931229caf74458b3fb51189de9e96c8 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.137 2004/02/10 01:55:25 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.138 2004/02/25 19:41:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -140,11 +140,11 @@ write_group_file(Relation grel)
 	bufsize = strlen(filename) + 12;
 	tempname = (char *) palloc(bufsize);
 	snprintf(tempname, bufsize, "%s.%d", filename, MyProcPid);
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
 	filename = repalloc(filename, strlen(filename) + 1 + strlen(".new"));
 	strcat(filename, ".new");
 #endif
-	
+
 	oumask = umask((mode_t) 077);
 	fp = AllocateFile(tempname, "w");
 	umask(oumask);
@@ -291,7 +291,7 @@ write_user_file(Relation urel)
 	bufsize = strlen(filename) + 12;
 	tempname = (char *) palloc(bufsize);
 	snprintf(tempname, bufsize, "%s.%d", filename, MyProcPid);
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
 	filename = repalloc(filename, strlen(filename) + 1 + strlen(".new"));
 	strcat(filename, ".new");
 #endif
@@ -466,7 +466,7 @@ AtEOXact_UpdatePasswordFile(bool isCommit)
 		user_file_update_needed = false;
 		write_user_file(urel);
 		heap_close(urel, NoLock);
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
 		{
 			/* Rename active file while not holding an exclusive lock */
 			char *filename = user_getfilename(), *filename_new;
@@ -485,7 +485,7 @@ AtEOXact_UpdatePasswordFile(bool isCommit)
 		group_file_update_needed = false;
 		write_group_file(grel);
 		heap_close(grel, NoLock);
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
 		{
 			/* Rename active file while not holding an exclusive lock */
 			char *filename = group_getfilename(), *filename_new;
diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
index afccd56e376afa7063314cea56bbda17a2003bff..72d693f5f21f6e82cac652a3693df62c6c3ed59b 100644
--- a/src/backend/port/sysv_shmem.c
+++ b/src/backend/port/sysv_shmem.c
@@ -10,7 +10,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/port/sysv_shmem.c,v 1.31 2004/02/08 22:28:56 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/port/sysv_shmem.c,v 1.32 2004/02/25 19:41:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -254,7 +254,7 @@ PGSharedMemoryCreate(uint32 size, bool makePrivate, int port)
 	{
 		void* origUsedShmemSegAddr = UsedShmemSegAddr;
 
-#ifdef CYGWIN
+#ifdef __CYGWIN__
 		/* cygipc (currently) appears to not detach on exec. */
 		PGSharedMemoryDetach();
 		UsedShmemSegAddr = origUsedShmemSegAddr;
@@ -373,7 +373,7 @@ PGSharedMemoryDetach(void)
 	if (UsedShmemSegAddr != NULL)
 	{
 		if ((shmdt(UsedShmemSegAddr) < 0)
-#if (defined(EXEC_BACKEND) && defined(CYGWIN))
+#if (defined(EXEC_BACKEND) && defined(__CYGWIN__))
 			/* Work-around for cygipc exec bug */
 			&& shmdt(NULL) < 0
 #endif
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index eb549f6b4a47d9f4efebd3a8b1e196e7be23fe14..42ce48d3c286b8f10216faa14655c48ce183b128 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.368 2004/02/23 20:45:59 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.369 2004/02/25 19:41:22 momjian Exp $
  *
  * NOTES
  *
@@ -2727,7 +2727,7 @@ SubPostmasterMain(int argc, char* argv[])
 	load_group();
 
 	/* Attach process to shared segments */
-	AttachSharedMemoryAndSemaphores();
+	CreateSharedMemoryAndSemaphores(false, MaxBackends, 0);
 
 	/* Run backend */
 	proc_exit(BackendRun(&port));
diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c
index f95b1b3441057d6d70526f73291061d89b5ec02b..ac738d8f77ab41557029fa81ed717e3184f795fe 100644
--- a/src/backend/storage/ipc/ipci.c
+++ b/src/backend/storage/ipc/ipci.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/storage/ipc/ipci.c,v 1.64 2004/02/10 01:55:25 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/storage/ipc/ipci.c,v 1.65 2004/02/25 19:41:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -36,8 +36,10 @@
  *		Creates and initializes shared memory and semaphores.
  *
  * This is called by the postmaster or by a standalone backend.
- * It is NEVER called by a backend forked from the postmaster;
- * for such a backend, the shared memory is already ready-to-go.
+ * It is also called by a backend forked from the postmaster under
+ * the EXEC_BACKEND case
+ *
+ * In the non EXEC_BACKEND case, backends already have shared memory ready-to-go.
  *
  * If "makePrivate" is true then we only need private memory, not shared
  * memory.	This is true for a standalone backend, false for a postmaster.
@@ -47,53 +49,68 @@ CreateSharedMemoryAndSemaphores(bool makePrivate,
 								int maxBackends,
 								int port)
 {
-	int			size;
-	int			numSemas;
-	PGShmemHeader *seghdr;
-
-	/*
-	 * Size of the Postgres shared-memory block is estimated via
-	 * moderately-accurate estimates for the big hogs, plus 100K for the
-	 * stuff that's too small to bother with estimating.
-	 */
-	size = BufferShmemSize();
-	size += LockShmemSize(maxBackends);
-	size += XLOGShmemSize();
-	size += CLOGShmemSize();
-	size += LWLockShmemSize();
-	size += SInvalShmemSize(maxBackends);
-	size += FreeSpaceShmemSize();
+	PGShmemHeader *seghdr = NULL;
+	if (!IsUnderPostmaster)
+	{
+		int	size;
+		int	numSemas;
+
+		/*
+		 * Size of the Postgres shared-memory block is estimated via
+		 * moderately-accurate estimates for the big hogs, plus 100K for the
+		 * stuff that's too small to bother with estimating.
+		 */
+		size = BufferShmemSize();
+		size += LockShmemSize(maxBackends);
+		size += XLOGShmemSize();
+		size += CLOGShmemSize();
+		size += LWLockShmemSize();
+		size += SInvalShmemSize(maxBackends);
+		size += FreeSpaceShmemSize();
 #ifdef EXEC_BACKEND
-	size += ShmemBackendArraySize();
+		size += ShmemBackendArraySize();
 #endif
-	size += 100000;
-	/* might as well round it off to a multiple of a typical page size */
-	size += 8192 - (size % 8192);
-
-	elog(DEBUG3, "invoking IpcMemoryCreate(size=%d)", size);
+		size += 100000;
+		/* might as well round it off to a multiple of a typical page size */
+		size += 8192 - (size % 8192);
+
+		elog(DEBUG3, "invoking IpcMemoryCreate(size=%d)", size);
+
+		/*
+		 * Create the shmem segment
+		 */
+		seghdr = PGSharedMemoryCreate(size, makePrivate, port);
+
+		/*
+		 * Create semaphores
+		 */
+		numSemas = ProcGlobalSemas(maxBackends);
+		numSemas += SpinlockSemas();
+		PGReserveSemaphores(numSemas, port);
+	}
+	else
+	{
+		/*
+		 * Attach to the shmem segment.
+		 * (this should only ever be reached by EXEC_BACKEND code,
+		 *  and only then with makePrivate == false)
+		 */
+		Assert(ExecBackend && !makePrivate);
+		seghdr = PGSharedMemoryCreate(-1, makePrivate, 0);
+	}
 
-	/*
-	 * Create the shmem segment
-	 */
-	seghdr = PGSharedMemoryCreate(size, makePrivate, port);
-
-	/*
-	 * Create semaphores
-	 */
-	numSemas = ProcGlobalSemas(maxBackends);
-	numSemas += SpinlockSemas();
-	PGReserveSemaphores(numSemas, port);
 
 	/*
 	 * Set up shared memory allocation mechanism
 	 */
-	InitShmemAllocation(seghdr, true);
+	InitShmemAllocation(seghdr, !IsUnderPostmaster);
 
 	/*
 	 * Now initialize LWLocks, which do shared memory allocation and are
 	 * needed for InitShmemIndex.
 	 */
-	CreateLWLocks();
+	if (!IsUnderPostmaster)
+		CreateLWLocks();
 
 	/*
 	 * Set up shmem.c index hashtable
@@ -137,41 +154,7 @@ CreateSharedMemoryAndSemaphores(bool makePrivate,
 	/*
 	 * Alloc the win32 shared backend array
 	 */
-	ShmemBackendArrayAllocation();
+	if (!IsUnderPostmaster)
+		ShmemBackendArrayAllocation();
 #endif
 }
-
-
-#ifdef EXEC_BACKEND
-/*
- * AttachSharedMemoryAndSemaphores
- *		Attaches to the existing shared resources.
- */
-
-/* FIXME: [fork/exec] This function is starting to look pretty much like
-	CreateSharedMemoryAndSemaphores. Refactor? */
-void
-AttachSharedMemoryAndSemaphores(void)
-{
-	PGShmemHeader *seghdr = PGSharedMemoryCreate(-1,false,-1);
-
-	InitShmemAllocation(seghdr, false);
-
-	InitShmemIndex();
-
-	XLOGShmemInit();
-	CLOGShmemInit();
-	InitBufferPool();
-
-	InitLocks();
-	InitLockTable(MaxBackends);
-
-	InitProcGlobal(MaxBackends);
-
-	CreateSharedInvalidationState(MaxBackends);
-
-	InitFreeSpaceMap();
-
-	PMSignalInit();
-}
-#endif
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 5fa4be73c433b3d1d7fec2f33fc8295fc6befd3b..5f340dd2a13838572843836254f142b9e1caabe0 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.124 2004/01/19 19:04:40 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.125 2004/02/25 19:41:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1611,6 +1611,10 @@ DetermineLocalTimeZone(struct tm * tm)
 		 * and reassemble to get a representation of local time.
 		 */
 		tx = localtime(&mytime);
+		if (!tx)
+			ereport(ERROR,
+					(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
+					 errmsg("timestamp out of range")));
 		day = date2j(tx->tm_year + 1900, tx->tm_mon + 1, tx->tm_mday) -
 			UNIX_EPOCH_JDATE;
 		locsec = tx->tm_sec + (tx->tm_min + (day * 24 + tx->tm_hour) * 60) * 60;
@@ -1632,6 +1636,10 @@ DetermineLocalTimeZone(struct tm * tm)
 		mysec += delta1;
 		mytime = (time_t) mysec;
 		tx = localtime(&mytime);
+		if (!tx)
+			ereport(ERROR,
+					(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
+					 errmsg("timestamp out of range")));
 		day = date2j(tx->tm_year + 1900, tx->tm_mon + 1, tx->tm_mday) -
 			UNIX_EPOCH_JDATE;
 		locsec = tx->tm_sec + (tx->tm_min + (day * 24 + tx->tm_hour) * 60) * 60;
@@ -1653,6 +1661,10 @@ DetermineLocalTimeZone(struct tm * tm)
 			mysec += (delta2 - delta1);
 			mytime = (time_t) mysec;
 			tx = localtime(&mytime);
+			if (!tx)
+				ereport(ERROR,
+						(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
+						 errmsg("timestamp out of range")));
 			day = date2j(tx->tm_year + 1900, tx->tm_mon + 1, tx->tm_mday) -
 				UNIX_EPOCH_JDATE;
 			locsec = tx->tm_sec + (tx->tm_min + (day * 24 + tx->tm_hour) * 60) * 60;
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 8561cff549abe3b978be060d3af618812b895d58..ac0ee1a5e518930a4a45833c4ed6289c2e76da97 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.197 2004/02/10 01:55:26 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.198 2004/02/25 19:41:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3266,13 +3266,13 @@ write_relcache_init_file(void)
 		 * OK, rename the temp file to its final name, deleting any
 		 * previously-existing init file.
 		 */
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
 		rename(tempfilename, finalfilename);
 		LWLockRelease(RelCacheInitLock);
 #else
 		{
 			char		finalfilename_new[MAXPGPATH];
-	
+
 			snprintf(finalfilename_new, sizeof(finalfilename_new), "%s.new", finalfilename);
 			rename(tempfilename, finalfilename_new);
 			LWLockRelease(RelCacheInitLock);
diff --git a/src/include/port.h b/src/include/port.h
index 40ccc8a6d22e48a1e7722847799c0a0418e5c31a..d96ef4a6d16dd389e34ea707d8549d9c46ee0737 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/port.h,v 1.19 2004/02/10 03:42:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/port.h,v 1.20 2004/02/25 19:41:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,7 +34,7 @@ extern int	fseeko(FILE *stream, off_t offset, int whence);
 extern off_t ftello(FILE *stream);
 #endif
 
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
 /*
  * Win32 doesn't have reliable rename/unlink during concurrent access
  */
diff --git a/src/include/storage/ipc.h b/src/include/storage/ipc.h
index 3c2765cc48c8e465f111366ce312883e831b8af4..899198447f245766f1714a1b8c6de601475c02ab 100644
--- a/src/include/storage/ipc.h
+++ b/src/include/storage/ipc.h
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/storage/ipc.h,v 1.64 2003/12/20 17:31:21 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/storage/ipc.h,v 1.65 2004/02/25 19:41:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -30,10 +30,6 @@ extern void on_exit_reset(void);
 
 /* ipci.c */
 extern void CreateSharedMemoryAndSemaphores(bool makePrivate,
-								int maxBackends,
-								int port);
-#ifdef EXEC_BACKEND
-extern void AttachSharedMemoryAndSemaphores(void);
-#endif
-
+											int maxBackends,
+											int port);
 #endif   /* IPC_H */
diff --git a/src/port/dirmod.c b/src/port/dirmod.c
index c0c7383299189ccf23d6b8e906c514af42906ca5..51ddd875c5f40b9336e5a03de3b4444a54b8c8de 100644
--- a/src/port/dirmod.c
+++ b/src/port/dirmod.c
@@ -10,20 +10,25 @@
  *	Win32 (NT, Win2k, XP).	replace() doesn't work on Win95/98/Me.
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/port/dirmod.c,v 1.10 2004/02/02 22:20:33 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/port/dirmod.c,v 1.11 2004/02/25 19:41:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #ifndef TEST_VERSION
 
-#if defined(WIN32) || defined(CYGWIN)
+#if defined(WIN32) || defined(__CYGWIN__)
+
+#ifdef __CYGWIN__
+#include <sys/time.h> /* timeval definition for PG_USLEEP */
+#endif
 
 #ifndef FRONTEND
 #include "postgres.h"
 #else
 #include "postgres_fe.h"
 #endif
+#include "miscadmin.h"
 
 #undef rename
 #undef unlink
@@ -36,19 +41,19 @@ pgrename(const char *from, const char *to)
 #ifdef WIN32
 	while (!MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING))
 #endif
-#ifdef CYGWIN
+#ifdef __CYGWIN__
 	while (rename(from, to) < 0)
 #endif
 	{
 #ifdef WIN32
 		if (GetLastError() != ERROR_ACCESS_DENIED)
 #endif
-#ifdef CYGWIN
+#ifdef __CYGWIN__
 		if (errno != EACCES)
 #endif
 			/* set errno? */
 			return -1;
-		Sleep(100);				/* ms */
+		PG_USLEEP(100000);				/* us */
 		if (loops == 30)
 #ifndef FRONTEND
 			elog(LOG, "could not rename \"%s\" to \"%s\", continuing to try",
@@ -80,7 +85,7 @@ pgunlink(const char *path)
 		if (errno != EACCES)
 			/* set errno? */
 			return -1;
-		Sleep(100);				/* ms */
+		PG_USLEEP(100000);				/* us */
 		if (loops == 30)
 #ifndef FRONTEND
 			elog(LOG, "could not unlink \"%s\", continuing to try",
diff --git a/src/utils/dllinit.c b/src/utils/dllinit.c
index 264806e4abbd15aaa3a981db32571d49468df629..3a0097d28e6775d2c2ed615721f650d0e7c5fa25 100644
--- a/src/utils/dllinit.c
+++ b/src/utils/dllinit.c
@@ -1,4 +1,4 @@
-#ifdef CYGWIN
+#ifdef __CYGWIN__
 #include <cygwin/version.h>
 #endif
 #if CYGWIN_VERSION_DLL_MAJOR < 1001
@@ -88,7 +88,9 @@ DllMain(
 	__hDllInstance_base = hInst;
 #endif   /* __CYGWIN__ */
 
+#ifdef __CYGWIN__
 	_impure_ptr = __imp_reent_data;
+#endif
 
 	switch (reason)
 	{