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.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c
index f2bdc3eb91d..0b80e0585ec 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.70 2003/08/04 02:40:03 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.71 2003/09/21 17:57:21 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -131,6 +131,7 @@ InitShmemAllocation(void *seghdr)
void *
ShmemAlloc(Size size)
{
+ uint32 newStart;
uint32 newFree;
void *newSpace;
@@ -146,10 +147,16 @@ ShmemAlloc(Size size)
SpinLockAcquire(ShmemLock);
- newFree = shmemseghdr->freeoffset + size;
+ newStart = shmemseghdr->freeoffset;
+
+ /* extra alignment for large requests, since they are probably buffers */
+ if (size >= BLCKSZ)
+ newStart = BUFFERALIGN(newStart);
+
+ newFree = newStart + size;
if (newFree <= shmemseghdr->totalsize)
{
- newSpace = (void *) MAKE_PTR(shmemseghdr->freeoffset);
+ newSpace = (void *) MAKE_PTR(newStart);
shmemseghdr->freeoffset = newFree;
}
else