Commit d2aecaea authored by Robert Haas's avatar Robert Haas

Modify dynamic shared memory code to use Size rather than uint64.

This is more consistent with what we do elsewhere.
parent c737a2e5
...@@ -67,7 +67,7 @@ struct dsm_segment ...@@ -67,7 +67,7 @@ struct dsm_segment
uint32 control_slot; /* Slot in control segment. */ uint32 control_slot; /* Slot in control segment. */
void *impl_private; /* Implementation-specific private data. */ void *impl_private; /* Implementation-specific private data. */
void *mapped_address; /* Mapping address, or NULL if unmapped. */ void *mapped_address; /* Mapping address, or NULL if unmapped. */
uint64 mapped_size; /* Size of our mapping. */ Size mapped_size; /* Size of our mapping. */
}; };
/* Shared-memory state for a dynamic shared memory segment. */ /* Shared-memory state for a dynamic shared memory segment. */
...@@ -94,7 +94,7 @@ static void dsm_postmaster_shutdown(int code, Datum arg); ...@@ -94,7 +94,7 @@ static void dsm_postmaster_shutdown(int code, Datum arg);
static void dsm_backend_shutdown(int code, Datum arg); static void dsm_backend_shutdown(int code, Datum arg);
static dsm_segment *dsm_create_descriptor(void); static dsm_segment *dsm_create_descriptor(void);
static bool dsm_control_segment_sane(dsm_control_header *control, static bool dsm_control_segment_sane(dsm_control_header *control,
uint64 mapped_size); Size mapped_size);
static uint64 dsm_control_bytes_needed(uint32 nitems); static uint64 dsm_control_bytes_needed(uint32 nitems);
/* Has this backend initialized the dynamic shared memory system yet? */ /* Has this backend initialized the dynamic shared memory system yet? */
...@@ -128,7 +128,7 @@ static dlist_head dsm_segment_list = DLIST_STATIC_INIT(dsm_segment_list); ...@@ -128,7 +128,7 @@ static dlist_head dsm_segment_list = DLIST_STATIC_INIT(dsm_segment_list);
*/ */
static dsm_handle dsm_control_handle; static dsm_handle dsm_control_handle;
static dsm_control_header *dsm_control; static dsm_control_header *dsm_control;
static uint64 dsm_control_mapped_size = 0; static Size dsm_control_mapped_size = 0;
static void *dsm_control_impl_private = NULL; static void *dsm_control_impl_private = NULL;
/* /*
...@@ -142,7 +142,7 @@ dsm_postmaster_startup(void) ...@@ -142,7 +142,7 @@ dsm_postmaster_startup(void)
{ {
void *dsm_control_address = NULL; void *dsm_control_address = NULL;
uint32 maxitems; uint32 maxitems;
uint64 segsize; Size segsize;
Assert(!IsUnderPostmaster); Assert(!IsUnderPostmaster);
...@@ -214,8 +214,8 @@ dsm_cleanup_using_control_segment(void) ...@@ -214,8 +214,8 @@ dsm_cleanup_using_control_segment(void)
void *junk_mapped_address = NULL; void *junk_mapped_address = NULL;
void *impl_private = NULL; void *impl_private = NULL;
void *junk_impl_private = NULL; void *junk_impl_private = NULL;
uint64 mapped_size = 0; Size mapped_size = 0;
uint64 junk_mapped_size = 0; Size junk_mapped_size = 0;
uint32 nitems; uint32 nitems;
uint32 i; uint32 i;
dsm_handle old_control_handle; dsm_handle old_control_handle;
...@@ -453,7 +453,7 @@ dsm_postmaster_shutdown(int code, Datum arg) ...@@ -453,7 +453,7 @@ dsm_postmaster_shutdown(int code, Datum arg)
void *dsm_control_address; void *dsm_control_address;
void *junk_mapped_address = NULL; void *junk_mapped_address = NULL;
void *junk_impl_private = NULL; void *junk_impl_private = NULL;
uint64 junk_mapped_size = 0; Size junk_mapped_size = 0;
/* /*
* If some other backend exited uncleanly, it might have corrupted the * If some other backend exited uncleanly, it might have corrupted the
...@@ -562,7 +562,7 @@ dsm_backend_startup(void) ...@@ -562,7 +562,7 @@ dsm_backend_startup(void)
* Create a new dynamic shared memory segment. * Create a new dynamic shared memory segment.
*/ */
dsm_segment * dsm_segment *
dsm_create(uint64 size) dsm_create(Size size)
{ {
dsm_segment *seg = dsm_create_descriptor(); dsm_segment *seg = dsm_create_descriptor();
uint32 i; uint32 i;
...@@ -733,7 +733,7 @@ dsm_backend_shutdown(int code, Datum arg) ...@@ -733,7 +733,7 @@ dsm_backend_shutdown(int code, Datum arg)
* address. For the caller's convenience, we return the mapped address. * address. For the caller's convenience, we return the mapped address.
*/ */
void * void *
dsm_resize(dsm_segment *seg, uint64 size) dsm_resize(dsm_segment *seg, Size size)
{ {
Assert(seg->control_slot != INVALID_CONTROL_SLOT); Assert(seg->control_slot != INVALID_CONTROL_SLOT);
dsm_impl_op(DSM_OP_RESIZE, seg->handle, size, &seg->impl_private, dsm_impl_op(DSM_OP_RESIZE, seg->handle, size, &seg->impl_private,
...@@ -887,7 +887,7 @@ dsm_segment_address(dsm_segment *seg) ...@@ -887,7 +887,7 @@ dsm_segment_address(dsm_segment *seg)
/* /*
* Get the size of a mapping. * Get the size of a mapping.
*/ */
uint64 Size
dsm_segment_map_length(dsm_segment *seg) dsm_segment_map_length(dsm_segment *seg)
{ {
Assert(seg->mapped_address != NULL); Assert(seg->mapped_address != NULL);
...@@ -947,7 +947,7 @@ dsm_create_descriptor(void) ...@@ -947,7 +947,7 @@ dsm_create_descriptor(void)
* our segments at all. * our segments at all.
*/ */
static bool static bool
dsm_control_segment_sane(dsm_control_header *control, uint64 mapped_size) dsm_control_segment_sane(dsm_control_header *control, Size mapped_size)
{ {
if (mapped_size < offsetof(dsm_control_header, item)) if (mapped_size < offsetof(dsm_control_header, item))
return false; /* Mapped size too short to read header. */ return false; /* Mapped size too short to read header. */
......
...@@ -69,24 +69,24 @@ ...@@ -69,24 +69,24 @@
#include "utils/memutils.h" #include "utils/memutils.h"
#ifdef USE_DSM_POSIX #ifdef USE_DSM_POSIX
static bool dsm_impl_posix(dsm_op op, dsm_handle handle, uint64 request_size, static bool dsm_impl_posix(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, void **impl_private, void **mapped_address,
uint64 *mapped_size, int elevel); Size *mapped_size, int elevel);
#endif #endif
#ifdef USE_DSM_SYSV #ifdef USE_DSM_SYSV
static bool dsm_impl_sysv(dsm_op op, dsm_handle handle, uint64 request_size, static bool dsm_impl_sysv(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, void **impl_private, void **mapped_address,
uint64 *mapped_size, int elevel); Size *mapped_size, int elevel);
#endif #endif
#ifdef USE_DSM_WINDOWS #ifdef USE_DSM_WINDOWS
static bool dsm_impl_windows(dsm_op op, dsm_handle handle, uint64 request_size, static bool dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, void **impl_private, void **mapped_address,
uint64 *mapped_size, int elevel); Size *mapped_size, int elevel);
#endif #endif
#ifdef USE_DSM_MMAP #ifdef USE_DSM_MMAP
static bool dsm_impl_mmap(dsm_op op, dsm_handle handle, uint64 request_size, static bool dsm_impl_mmap(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, void **impl_private, void **mapped_address,
uint64 *mapped_size, int elevel); Size *mapped_size, int elevel);
#endif #endif
static int errcode_for_dynamic_shared_memory(void); static int errcode_for_dynamic_shared_memory(void);
...@@ -156,19 +156,14 @@ int dynamic_shared_memory_type; ...@@ -156,19 +156,14 @@ int dynamic_shared_memory_type;
*----- *-----
*/ */
bool bool
dsm_impl_op(dsm_op op, dsm_handle handle, uint64 request_size, dsm_impl_op(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, uint64 *mapped_size, void **impl_private, void **mapped_address, Size *mapped_size,
int elevel) int elevel)
{ {
Assert(op == DSM_OP_CREATE || op == DSM_OP_RESIZE || request_size == 0); Assert(op == DSM_OP_CREATE || op == DSM_OP_RESIZE || request_size == 0);
Assert((op != DSM_OP_CREATE && op != DSM_OP_ATTACH) || Assert((op != DSM_OP_CREATE && op != DSM_OP_ATTACH) ||
(*mapped_address == NULL && *mapped_size == 0)); (*mapped_address == NULL && *mapped_size == 0));
if (request_size > (size_t) -1)
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("requested shared memory size overflows size_t")));
switch (dynamic_shared_memory_type) switch (dynamic_shared_memory_type)
{ {
#ifdef USE_DSM_POSIX #ifdef USE_DSM_POSIX
...@@ -241,8 +236,8 @@ dsm_impl_can_resize(void) ...@@ -241,8 +236,8 @@ dsm_impl_can_resize(void)
* a different shared memory implementation. * a different shared memory implementation.
*/ */
static bool static bool
dsm_impl_posix(dsm_op op, dsm_handle handle, uint64 request_size, dsm_impl_posix(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, uint64 *mapped_size, void **impl_private, void **mapped_address, Size *mapped_size,
int elevel) int elevel)
{ {
char name[64]; char name[64];
...@@ -407,8 +402,8 @@ dsm_impl_posix(dsm_op op, dsm_handle handle, uint64 request_size, ...@@ -407,8 +402,8 @@ dsm_impl_posix(dsm_op op, dsm_handle handle, uint64 request_size,
* those are not supported everywhere. * those are not supported everywhere.
*/ */
static bool static bool
dsm_impl_sysv(dsm_op op, dsm_handle handle, uint64 request_size, dsm_impl_sysv(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, uint64 *mapped_size, void **impl_private, void **mapped_address, Size *mapped_size,
int elevel) int elevel)
{ {
key_t key; key_t key;
...@@ -612,9 +607,9 @@ dsm_impl_sysv(dsm_op op, dsm_handle handle, uint64 request_size, ...@@ -612,9 +607,9 @@ dsm_impl_sysv(dsm_op op, dsm_handle handle, uint64 request_size,
* when the process containing the reference exits. * when the process containing the reference exits.
*/ */
static bool static bool
dsm_impl_windows(dsm_op op, dsm_handle handle, uint64 request_size, dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, void **impl_private, void **mapped_address,
uint64 *mapped_size, int elevel) Size *mapped_size, int elevel)
{ {
char *address; char *address;
HANDLE hmap; HANDLE hmap;
...@@ -780,8 +775,8 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, uint64 request_size, ...@@ -780,8 +775,8 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, uint64 request_size,
* directory to a ramdisk to avoid this problem, if available. * directory to a ramdisk to avoid this problem, if available.
*/ */
static bool static bool
dsm_impl_mmap(dsm_op op, dsm_handle handle, uint64 request_size, dsm_impl_mmap(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, uint64 *mapped_size, void **impl_private, void **mapped_address, Size *mapped_size,
int elevel) int elevel)
{ {
char name[64]; char name[64];
...@@ -892,7 +887,7 @@ dsm_impl_mmap(dsm_op op, dsm_handle handle, uint64 request_size, ...@@ -892,7 +887,7 @@ dsm_impl_mmap(dsm_op op, dsm_handle handle, uint64 request_size,
*/ */
while (success && remaining > 0) while (success && remaining > 0)
{ {
uint64 goal = remaining; Size goal = remaining;
if (goal > ZBUFFER_SIZE) if (goal > ZBUFFER_SIZE)
goal = ZBUFFER_SIZE; goal = ZBUFFER_SIZE;
......
...@@ -21,9 +21,9 @@ typedef struct dsm_segment dsm_segment; ...@@ -21,9 +21,9 @@ typedef struct dsm_segment dsm_segment;
extern void dsm_postmaster_startup(void); extern void dsm_postmaster_startup(void);
/* Functions that create, update, or remove mappings. */ /* Functions that create, update, or remove mappings. */
extern dsm_segment *dsm_create(uint64 size); extern dsm_segment *dsm_create(Size size);
extern dsm_segment *dsm_attach(dsm_handle h); extern dsm_segment *dsm_attach(dsm_handle h);
extern void *dsm_resize(dsm_segment *seg, uint64 size); extern void *dsm_resize(dsm_segment *seg, Size size);
extern void *dsm_remap(dsm_segment *seg); extern void *dsm_remap(dsm_segment *seg);
extern void dsm_detach(dsm_segment *seg); extern void dsm_detach(dsm_segment *seg);
...@@ -33,7 +33,7 @@ extern dsm_segment *dsm_find_mapping(dsm_handle h); ...@@ -33,7 +33,7 @@ extern dsm_segment *dsm_find_mapping(dsm_handle h);
/* Informational functions. */ /* Informational functions. */
extern void *dsm_segment_address(dsm_segment *seg); extern void *dsm_segment_address(dsm_segment *seg);
extern uint64 dsm_segment_map_length(dsm_segment *seg); extern Size dsm_segment_map_length(dsm_segment *seg);
extern dsm_handle dsm_segment_handle(dsm_segment *seg); extern dsm_handle dsm_segment_handle(dsm_segment *seg);
#endif /* DSM_H */ #endif /* DSM_H */
...@@ -65,8 +65,8 @@ typedef enum ...@@ -65,8 +65,8 @@ typedef enum
} dsm_op; } dsm_op;
/* Create, attach to, detach from, resize, or destroy a segment. */ /* Create, attach to, detach from, resize, or destroy a segment. */
extern bool dsm_impl_op(dsm_op op, dsm_handle handle, uint64 request_size, extern bool dsm_impl_op(dsm_op op, dsm_handle handle, Size request_size,
void **impl_private, void **mapped_address, uint64 *mapped_size, void **impl_private, void **mapped_address, Size *mapped_size,
int elevel); int elevel);
/* Some implementations cannot resize segments. Can this one? */ /* Some implementations cannot resize segments. Can this one? */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment