Re: 7.4 shared memory error on 64-bit SPARC/Solaris 5.8

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Thomas Baden <lindysandiego(at)yahoo(dot)com>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: 7.4 shared memory error on 64-bit SPARC/Solaris 5.8
Date: 2003-11-30 03:35:59
Message-ID: 200311300335.hAU3Zxn07859@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


Your patch has been added to the PostgreSQL unapplied patches list at:

http://momjian.postgresql.org/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

---------------------------------------------------------------------------

Thomas Baden wrote:
> Hi there. My install was failing the regression tests
> due to a shared memory error.
>
> I'm running Solaris 5.8, YASSP, and I am using the Sun
> Forte 7 compiler suite generating 64-bit code.
>
> I did some digging around, and it turns out that the
> IpcMemoryKey is a 64-bit number. The source code uses
> uint32. Changing this to a size_t fixes the problem
> under Solaris. I don't know whether this would break
> other systems. Anyway, here's the fix:
>
> I don't have the GNU diff, so please forgive the
> crudeness of the following.
>
> in file postgresql-7.4/src/backend/port/sysv_shmem.c,
> lines 42-48:
> IpcMemoryKey UsedShmemSegID = 0;
> void *UsedShmemSegAddr = NULL;
>
> - static void *InternalIpcMemoryCreate(IpcMemoryKey
> memKey, uint32 size);
> + static void *InternalIpcMemoryCreate(IpcMemoryKey
> memKey, size_t size);
> static void IpcMemoryDetach(int status, Datum
> shmaddr);
> static void IpcMemoryDelete(int status, Datum
> shmId);
> static PGShmemHeader
> *PGSharedMemoryAttach(IpcMemoryKey key,
>
> in file postgresql-7.4/src/backend/port/sysv_shmem.c,
> lines 62-68:
> * print out an error and abort. Other types of
> errors are not recoverable.
> */
> static void *
> - InternalIpcMemoryCreate(IpcMemoryKey memKey, uint32
> size)
> + InternalIpcMemoryCreate(IpcMemoryKey memKey, size_t
> size)
> {
> IpcMemoryId shmid;
> void *memAddress;
>
> in file postgresql-7.4/src/backend/port/sysv_shmem.c,
> lines 234-240:
> * zero will be passed.
> */
> PGShmemHeader *
> - PGSharedMemoryCreate(uint32 size, bool makePrivate,
> int port)
> + PGSharedMemoryCreate(size_t size, bool makePrivate,
> int port)
> {
> IpcMemoryKey NextShmemSegID;
> void *memAddress;
>
> in file postgresql-7.4/src/include/storage/pg_shmem.h,
> lines 24-30:
> #ifndef PG_SHMEM_H
> #define PG_SHMEM_H
>
> - typedef uint32 IpcMemoryKey; /* shared memory key
> passed to shmget(2) */
> + typedef size_t IpcMemoryKey; /* shared memory key
> passed to shmget(2) */
>
> typedef struct PGShmemHeader /* standard header for
> all Postgres shmem */
> {
>
> in file postgresql-7.4/src/include/storage/pg_shmem.h,
> lines 41-47:
> extern void *UsedShmemSegAddr;
> #endif
>
> - extern PGShmemHeader *PGSharedMemoryCreate(uint32
> size, bool makePrivate,
> + extern PGShmemHeader *PGSharedMemoryCreate(size_t
> size, bool makePrivate,
> int port);
> extern bool PGSharedMemoryIsInUse(unsigned long id1,
> unsigned long id2);
> extern void PGSharedMemoryDetach(void);
>
> Cheers,
> -Thomas
>
> __________________________________
> Do you Yahoo!?
> Protect your identity with Yahoo! Mail AddressGuard
> http://antispam.yahoo.com/whatsnewfree
>
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
>

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2003-11-30 04:14:40 Re: internationalization of initdb
Previous Message Bruce Momjian 2003-11-30 03:33:50 Re: Bug in byteaout code in all PostgreSQL versions