diff options
Diffstat (limited to 'src/backend/storage/ipc/shmem.c')
-rw-r--r-- | src/backend/storage/ipc/shmem.c | 14 |
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; |