Avoid assuming that type key_t is 32 bits, since it reportedly isn't

on 64-bit Solaris.  Use a non-system-dependent datatype for UsedShmemSegID,
namely unsigned long (which we were already assuming could hold a shmem
key anyway, cf RecordSharedMemoryInLockFile).
This commit is contained in:
Tom Lane 2003-12-01 22:15:38 +00:00
parent 35ddc2edee
commit 5e2b99db95
6 changed files with 31 additions and 25 deletions

View File

@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.168 2003/11/29 19:51:41 pgsql Exp $ * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.169 2003/12/01 22:15:37 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -290,7 +290,9 @@ BootstrapMain(int argc, char *argv[])
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
char *p; char *p;
sscanf(optarg, "%d,%p,", &UsedShmemSegID, &UsedShmemSegAddr); sscanf(optarg, "%lu,%p,",
&UsedShmemSegID,
&UsedShmemSegAddr);
p = strchr(optarg, ','); p = strchr(optarg, ',');
if (p) if (p)
p = strchr(p + 1, ','); p = strchr(p + 1, ',');

View File

@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/port/sysv_sema.c,v 1.11 2003/11/29 19:51:54 pgsql Exp $ * $PostgreSQL: pgsql/src/backend/port/sysv_sema.c,v 1.12 2003/12/01 22:15:37 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -42,7 +42,7 @@ union semun
}; };
#endif #endif
typedef uint32 IpcSemaphoreKey; /* semaphore key passed to semget(2) */ typedef key_t IpcSemaphoreKey; /* semaphore key passed to semget(2) */
typedef int IpcSemaphoreId; /* semaphore ID returned by semget(2) */ typedef int IpcSemaphoreId; /* semaphore ID returned by semget(2) */
/* /*
@ -115,8 +115,8 @@ InternalIpcSemaphoreCreate(IpcSemaphoreKey semKey, int numSems)
*/ */
ereport(FATAL, ereport(FATAL,
(errmsg("could not create semaphores: %m"), (errmsg("could not create semaphores: %m"),
errdetail("Failed system call was semget(%d, %d, 0%o).", errdetail("Failed system call was semget(%lu, %d, 0%o).",
(int) semKey, numSems, (unsigned long) semKey, numSems,
IPC_CREAT | IPC_EXCL | IPCProtection), IPC_CREAT | IPC_EXCL | IPCProtection),
(errno == ENOSPC) ? (errno == ENOSPC) ?
errhint("This error does *not* mean that you have run out of disk space.\n" errhint("This error does *not* mean that you have run out of disk space.\n"

View File

@ -10,7 +10,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/port/sysv_shmem.c,v 1.26 2003/11/29 19:51:54 pgsql Exp $ * $PostgreSQL: pgsql/src/backend/port/sysv_shmem.c,v 1.27 2003/12/01 22:15:37 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -34,12 +34,14 @@
#include "storage/ipc.h" #include "storage/ipc.h"
#include "storage/pg_shmem.h" #include "storage/pg_shmem.h"
typedef key_t IpcMemoryKey; /* shared memory key passed to shmget(2) */
typedef int IpcMemoryId; /* shared memory ID returned by shmget(2) */ typedef int IpcMemoryId; /* shared memory ID returned by shmget(2) */
#define IPCProtection (0600) /* access/modify by user only */ #define IPCProtection (0600) /* access/modify by user only */
IpcMemoryKey UsedShmemSegID = 0; unsigned long UsedShmemSegID = 0;
void *UsedShmemSegAddr = NULL; void *UsedShmemSegAddr = NULL;
static void *InternalIpcMemoryCreate(IpcMemoryKey memKey, uint32 size); static void *InternalIpcMemoryCreate(IpcMemoryKey memKey, uint32 size);
@ -90,8 +92,8 @@ InternalIpcMemoryCreate(IpcMemoryKey memKey, uint32 size)
*/ */
ereport(FATAL, ereport(FATAL,
(errmsg("could not create shared memory segment: %m"), (errmsg("could not create shared memory segment: %m"),
errdetail("Failed system call was shmget(key=%d, size=%u, 0%o).", errdetail("Failed system call was shmget(key=%lu, size=%u, 0%o).",
(int) memKey, size, (unsigned long) memKey, size,
IPC_CREAT | IPC_EXCL | IPCProtection), IPC_CREAT | IPC_EXCL | IPCProtection),
(errno == EINVAL) ? (errno == EINVAL) ?
errhint("This error usually means that PostgreSQL's request for a shared memory " errhint("This error usually means that PostgreSQL's request for a shared memory "
@ -247,9 +249,10 @@ PGSharedMemoryCreate(uint32 size, bool makePrivate, int port)
/* If Exec case, just attach and return the pointer */ /* If Exec case, just attach and return the pointer */
if (ExecBackend && UsedShmemSegAddr != NULL && !makePrivate) if (ExecBackend && UsedShmemSegAddr != NULL && !makePrivate)
{ {
if ((hdr = PGSharedMemoryAttach(UsedShmemSegID, &shmid)) == NULL) hdr = PGSharedMemoryAttach((IpcMemoryKey) UsedShmemSegID, &shmid);
elog(FATAL, "could not attach to proper memory at fixed address: shmget(key=%d, addr=%p) failed: %m", if (hdr == NULL)
(int) UsedShmemSegID, UsedShmemSegAddr); elog(FATAL, "could not attach to proper memory at fixed address: shmget(key=%lu, addr=%p) failed: %m",
UsedShmemSegID, UsedShmemSegAddr);
return hdr; return hdr;
} }
@ -331,7 +334,7 @@ PGSharedMemoryCreate(uint32 size, bool makePrivate, int port)
/* Save info for possible future use */ /* Save info for possible future use */
UsedShmemSegAddr = memAddress; UsedShmemSegAddr = memAddress;
UsedShmemSegID = NextShmemSegID; UsedShmemSegID = (unsigned long) NextShmemSegID;
return hdr; return hdr;
} }

View File

@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.350 2003/11/29 19:51:55 pgsql Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.351 2003/12/01 22:15:37 tgl Exp $
* *
* NOTES * NOTES
* *
@ -2558,8 +2558,10 @@ BackendFork(Port *port)
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
Assert(UsedShmemSegID != 0 && UsedShmemSegAddr != NULL); Assert(UsedShmemSegID != 0 && UsedShmemSegAddr != NULL);
/* database name at the end because it might contain commas */ /* database name at the end because it might contain commas */
snprintf(pbuf, NAMEDATALEN + 256, "%d,%d,%d,%p,%s", port->sock, canAcceptConnections(), snprintf(pbuf, sizeof(pbuf), "%d,%d,%lu,%p,%s",
UsedShmemSegID, UsedShmemSegAddr, port->database_name); port->sock, canAcceptConnections(),
UsedShmemSegID, UsedShmemSegAddr,
port->database_name);
av[ac++] = pbuf; av[ac++] = pbuf;
#else #else
av[ac++] = port->database_name; av[ac++] = port->database_name;
@ -2902,8 +2904,8 @@ SSDataBase(int xlop)
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
Assert(UsedShmemSegID != 0 && UsedShmemSegAddr != NULL); Assert(UsedShmemSegID != 0 && UsedShmemSegAddr != NULL);
/* database name at the end because it might contain commas */ /* database name at the end because it might contain commas */
snprintf(pbuf, NAMEDATALEN + 256, "%d,%p,%s", UsedShmemSegID, snprintf(pbuf, sizeof(pbuf), "%lu,%p,%s",
UsedShmemSegAddr, "template1"); UsedShmemSegID, UsedShmemSegAddr, "template1");
av[ac++] = pbuf; av[ac++] = pbuf;
#else #else
av[ac++] = "template1"; av[ac++] = "template1";

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.378 2003/11/29 21:40:43 tgl Exp $ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.379 2003/12/01 22:15:37 tgl Exp $
* *
* NOTES * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
@ -2282,7 +2282,8 @@ PostgresMain(int argc, char *argv[], const char *username)
* global or static, * global or static,
* when fork */ * when fork */
sscanf(optarg, "%d,%d,%d,%p,", &MyProcPort->sock, &PMcanAcceptConnections, sscanf(optarg, "%d,%d,%lu,%p,",
&MyProcPort->sock, &PMcanAcceptConnections,
&UsedShmemSegID, &UsedShmemSegAddr); &UsedShmemSegID, &UsedShmemSegAddr);
/* Grab dbname as last param */ /* Grab dbname as last param */
for (i = 0, p = optarg - 1; i < 4 && p; i++) for (i = 0, p = optarg - 1; i < 4 && p; i++)

View File

@ -17,15 +17,13 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/storage/pg_shmem.h,v 1.9 2003/11/29 22:41:13 pgsql Exp $ * $PostgreSQL: pgsql/src/include/storage/pg_shmem.h,v 1.10 2003/12/01 22:15:38 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
#ifndef PG_SHMEM_H #ifndef PG_SHMEM_H
#define PG_SHMEM_H #define PG_SHMEM_H
typedef uint32 IpcMemoryKey; /* shared memory key passed to shmget(2) */
typedef struct PGShmemHeader /* standard header for all Postgres shmem */ typedef struct PGShmemHeader /* standard header for all Postgres shmem */
{ {
int32 magic; /* magic # to identify Postgres segments */ int32 magic; /* magic # to identify Postgres segments */
@ -37,7 +35,7 @@ typedef struct PGShmemHeader /* standard header for all Postgres shmem */
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
extern IpcMemoryKey UsedShmemSegID; extern unsigned long UsedShmemSegID;
extern void *UsedShmemSegAddr; extern void *UsedShmemSegAddr;
#endif #endif