diff -rdup postgresql-9.4beta2/src/backend/bootstrap/bootstrap.c postgresql-9.4beta2_qnx/src/backend/bootstrap/bootstrap.c
--- postgresql-9.4beta2/src/backend/bootstrap/bootstrap.c	2014-07-21 15:07:50.000000000 -0400
+++ postgresql-9.4beta2_qnx/src/backend/bootstrap/bootstrap.c	2014-08-13 13:07:27.000000000 -0400
@@ -352,6 +352,11 @@ AuxiliaryProcessMain(int argc, char *arg
 	SetProcessingMode(BootstrapProcessing);
 	IgnoreSystemIndexes = true;
 
+
+	/* obtain shared lock using fcntl (or FATAL error) */
+	CreateDataDirLockFcntl(false);
+
+
 	/* Initialize MaxBackends (if under postmaster, was done already) */
 	if (!IsUnderPostmaster)
 		InitializeMaxBackends();
diff -rdup postgresql-9.4beta2/src/backend/postmaster/postmaster.c postgresql-9.4beta2_qnx/src/backend/postmaster/postmaster.c
--- postgresql-9.4beta2/src/backend/postmaster/postmaster.c	2014-07-21 15:07:50.000000000 -0400
+++ postgresql-9.4beta2_qnx/src/backend/postmaster/postmaster.c	2014-08-13 17:21:06.000000000 -0400
@@ -881,6 +881,9 @@ PostmasterMain(int argc, char *argv[])
 	 */
 	CreateDataDirLockFile(true);
 
+	/* postmaster gets exclusive lock then holds shared lock (or FATAL error) */
+	CreateDataDirLockFcntl(true);
+
 	/*
 	 * Initialize SSL library, if specified.
 	 */
diff -rdup postgresql-9.4beta2/src/backend/tcop/postgres.c postgresql-9.4beta2_qnx/src/backend/tcop/postgres.c
--- postgresql-9.4beta2/src/backend/tcop/postgres.c	2014-07-21 15:07:50.000000000 -0400
+++ postgresql-9.4beta2_qnx/src/backend/tcop/postgres.c	2014-08-13 17:23:00.000000000 -0400
@@ -3679,6 +3679,9 @@ PostgresMain(int argc, char *argv[],
 		/* Initialize MaxBackends (if under postmaster, was done already) */
 		InitializeMaxBackends();
 	}
+	
+	/* obtain shared lock using fcntl (or FATAL error) */
+	CreateDataDirLockFcntl(false);
 
 	/* Early initialization */
 	BaseInit();
diff -rdup postgresql-9.4beta2/src/backend/utils/init/miscinit.c postgresql-9.4beta2_qnx/src/backend/utils/init/miscinit.c
--- postgresql-9.4beta2/src/backend/utils/init/miscinit.c	2014-07-21 15:07:50.000000000 -0400
+++ postgresql-9.4beta2_qnx/src/backend/utils/init/miscinit.c	2014-08-13 17:23:35.000000000 -0400
@@ -47,6 +47,7 @@
 
 
 #define DIRECTORY_LOCK_FILE		"postmaster.pid"
+#define DIRECTORY_LOCK_FCNTL	"postmaster.fcntl"
 
 ProcessingMode Mode = InitProcessing;
 
@@ -1257,3 +1258,64 @@ pg_bindtextdomain(const char *domain)
 	}
 #endif
 }
+
+
+/*
+ * Create a lock using fcntl.
+ *
+ */
+void
+CreateDataDirLockFcntl(bool amPostmaster)
+{
+	int	fd = -1;
+	struct flock fl;
+
+	fd = open(DIRECTORY_LOCK_FCNTL, O_RDWR | O_CREAT, 0600);
+	if (fd < 0) 
+	{
+		ereport(FATAL,
+				(errcode_for_file_access(),
+				 errmsg("KBAKER process [%d] could not open fcntl lock file \"%s\": %m",
+						getpid(), DIRECTORY_LOCK_FCNTL)));
+	}
+
+	if (amPostmaster)
+	{
+		/* postmaster must start with exclusive lock to ensure no locks exist from old processes. */
+		fl.l_type = F_WRLCK;
+		fl.l_whence = SEEK_SET;
+		fl.l_start = 0;
+		fl.l_len = 0;
+
+		if (fcntl(fd, F_SETLK, &fl) == -1) 
+		{
+			ereport(FATAL,
+					(errcode_for_file_access(),
+					 errmsg("KBAKER process [%d] could not exclusive lock \"%s\": %m",
+							getpid(), DIRECTORY_LOCK_FCNTL)));
+			    
+		}
+
+		ereport(LOG,
+				(errmsg("KBAKER: process [%d] exclusive lock OK \"%s\"", getpid(), DIRECTORY_LOCK_FCNTL)));
+
+		/* postmaster continues to downgrade to read lock for lifetime of process, allowing other processes obtain read locks */
+	}
+	
+	/* obtain read lock, to be held for lifetime of process. */
+	fl.l_type = F_RDLCK;
+	fl.l_whence = SEEK_SET;
+	fl.l_start = 0;
+	fl.l_len = 0;
+
+	if (fcntl(fd, F_SETLK, &fl) == -1) 
+	{
+		ereport(FATAL,
+				(errcode_for_file_access(),
+				 errmsg("KBAKER process [%d] could not share lock \"%s\": %m",
+						getpid(), DIRECTORY_LOCK_FCNTL)));
+	}
+
+	ereport(LOG,
+			(errmsg("KBAKER: process [%d] share lock OK \"%s\"", getpid(), DIRECTORY_LOCK_FCNTL)));
+}
diff -rdup postgresql-9.4beta2/src/include/miscadmin.h postgresql-9.4beta2_qnx/src/include/miscadmin.h
--- postgresql-9.4beta2/src/include/miscadmin.h	2014-07-21 15:07:50.000000000 -0400
+++ postgresql-9.4beta2_qnx/src/include/miscadmin.h	2014-08-13 17:17:19.000000000 -0400
@@ -425,6 +425,7 @@ extern char *local_preload_libraries_str
 #define LOCK_FILE_LINE_SHMEM_KEY	7
 
 extern void CreateDataDirLockFile(bool amPostmaster);
+extern void CreateDataDirLockFcntl(bool amPostmaster);
 extern void CreateSocketLockFile(const char *socketfile, bool amPostmaster,
 					 const char *socketDir);
 extern void TouchSocketLockFiles(void);
