aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/ipc/shmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/ipc/shmem.c')
-rw-r--r--src/backend/storage/ipc/shmem.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c
index 3304ec67c59..2b0eee5e4f2 100644
--- a/src/backend/storage/ipc/shmem.c
+++ b/src/backend/storage/ipc/shmem.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.62 2001/10/25 05:49:42 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.63 2001/12/28 18:16:43 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -132,21 +132,23 @@ ShmemAlloc(Size size)
{
uint32 newFree;
void *newSpace;
+ /* use volatile pointer to prevent code rearrangement */
+ volatile PGShmemHeader *shmemseghdr = ShmemSegHdr;
/*
* ensure all space is adequately aligned.
*/
size = MAXALIGN(size);
- Assert(ShmemSegHdr != NULL);
+ Assert(shmemseghdr != NULL);
SpinLockAcquire(ShmemLock);
- newFree = ShmemSegHdr->freeoffset + size;
- if (newFree <= ShmemSegHdr->totalsize)
+ newFree = shmemseghdr->freeoffset + size;
+ if (newFree <= shmemseghdr->totalsize)
{
- newSpace = (void *) MAKE_PTR(ShmemSegHdr->freeoffset);
- ShmemSegHdr->freeoffset = newFree;
+ newSpace = (void *) MAKE_PTR(shmemseghdr->freeoffset);
+ shmemseghdr->freeoffset = newFree;
}
else
newSpace = NULL;