diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/utils/init/miscinit.c | 27 | 
1 files changed, 24 insertions, 3 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index e6b6676706f..21b9277f384 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -8,7 +8,7 @@   *   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.184 2010/04/20 23:48:47 tgl Exp $ + *	  $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.184.2.1 2010/08/16 17:32:53 tgl Exp $   *   *-------------------------------------------------------------------------   */ @@ -818,6 +818,9 @@ CreateLockFile(const char *filename, bool amPostmaster,  		 * admin) but has left orphan backends behind.	Check for this by  		 * looking to see if there is an associated shmem segment that is  		 * still in use. +		 * +		 * Note: because postmaster.pid is written in two steps, we might not +		 * find the shmem ID values in it; we can't treat that as an error.  		 */  		if (isDDLock)  		{ @@ -881,7 +884,18 @@ CreateLockFile(const char *filename, bool amPostmaster,  				(errcode_for_file_access(),  				 errmsg("could not write lock file \"%s\": %m", filename)));  	} -	if (close(fd)) +	if (pg_fsync(fd) != 0) +	{ +		int			save_errno = errno; + +		close(fd); +		unlink(filename); +		errno = save_errno; +		ereport(FATAL, +				(errcode_for_file_access(), +				 errmsg("could not write lock file \"%s\": %m", filename))); +	} +	if (close(fd) != 0)  	{  		int			save_errno = errno; @@ -1042,7 +1056,14 @@ RecordSharedMemoryInLockFile(unsigned long id1, unsigned long id2)  		close(fd);  		return;  	} -	if (close(fd)) +	if (pg_fsync(fd) != 0) +	{ +		ereport(LOG, +				(errcode_for_file_access(), +				 errmsg("could not write to file \"%s\": %m", +						DIRECTORY_LOCK_FILE))); +	} +	if (close(fd) != 0)  	{  		ereport(LOG,  				(errcode_for_file_access(),  | 
