aboutsummaryrefslogtreecommitdiff
path: root/src/backend/port/win32/shmem.c
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2007-03-21 14:39:23 +0000
committerMagnus Hagander <magnus@hagander.net>2007-03-21 14:39:23 +0000
commit18d82d03b51f1d34e8b076e89e54a4c8e0818343 (patch)
tree011b9c702b791ad10ddb474e4cb12956d01d2710 /src/backend/port/win32/shmem.c
parent3b765dba780ccb08f4ff7a693d57c19737a4d51c (diff)
downloadpostgresql-18d82d03b51f1d34e8b076e89e54a4c8e0818343.tar.gz
postgresql-18d82d03b51f1d34e8b076e89e54a4c8e0818343.zip
Native shared memory implementation for win32.
Uses same underlying tech as before, but not the sysv emulation layer.
Diffstat (limited to 'src/backend/port/win32/shmem.c')
-rw-r--r--src/backend/port/win32/shmem.c128
1 files changed, 0 insertions, 128 deletions
diff --git a/src/backend/port/win32/shmem.c b/src/backend/port/win32/shmem.c
deleted file mode 100644
index 18dac2f553d..00000000000
--- a/src/backend/port/win32/shmem.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * shmem.c
- * Microsoft Windows Win32 Shared Memory Emulation
- *
- * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
- *
- * IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/port/win32/shmem.c,v 1.14 2007/01/05 22:19:35 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-
-static DWORD s_segsize = 0;
-
-/* Detach from a shared mem area based on its address */
-int
-shmdt(const void *shmaddr)
-{
- if (UnmapViewOfFile((LPCVOID *) shmaddr))
- return 0;
- else
- return -1;
-}
-
-/* Attach to an existing area */
-void *
-shmat(int memId, void *shmaddr, int flag)
-{
- /* TODO -- shmat needs to count # attached to shared mem */
- void *lpmem = MapViewOfFileEx((HANDLE) memId,
- FILE_MAP_WRITE | FILE_MAP_READ,
- 0, 0, /* (DWORD)pshmdsc->segsize */ 0 /* s_segsize */ , shmaddr);
-
- if (lpmem == NULL)
- {
- lpmem = (void *) -1;
- _dosmaperr(GetLastError());
- }
-
- return lpmem;
-}
-
-/* Control a shared mem area */
-int
-shmctl(int shmid, int flag, struct shmid_ds * dummy)
-{
- if (flag == IPC_RMID)
- {
- /* Delete the area */
- CloseHandle((HANDLE) shmid);
- return 0;
- }
- if (flag == IPC_STAT)
- {
- /* Can only test for if exists */
- int hmap = shmget(shmid, 0, 0);
-
- if (hmap < 0)
- {
- /* Shared memory does not exist */
- errno = EINVAL;
- return -1;
- }
- else
- {
- /* Shared memory does exist and must be in use */
- shmctl(hmap, IPC_RMID, NULL); /* Release our hold on it */
- errno = 0;
- return 0;
- }
- }
-
- errno = EINVAL;
- return -1;
-}
-
-/* Get an area based on the IPC key */
-int
-shmget(int memKey, int size, int flag)
-{
- HANDLE hmap;
- char szShareMem[32];
- DWORD dwRet;
-
- s_segsize = size;
- sprintf(szShareMem, "PostgreSQL.%d", memKey);
-
- if (flag & IPC_CREAT)
- {
- hmap = CreateFileMapping((HANDLE) 0xFFFFFFFF, /* Use the swap file */
- NULL,
- PAGE_READWRITE, /* Memory is Read/Write */
- 0L, /* Size Upper 32 Bits */
- (DWORD) s_segsize, /* Size Lower 32 bits */
- szShareMem);
- }
- else
- {
- hmap = OpenFileMapping(FILE_MAP_ALL_ACCESS,
- FALSE,
- szShareMem);
- if (!hmap)
- {
- errno = ENOENT;
- return -1;
- }
- }
-
- dwRet = GetLastError();
- if (dwRet == ERROR_ALREADY_EXISTS && hmap && (flag & (IPC_CREAT | IPC_EXCL)))
- {
- /* Caller wanted to create the segment -- error if already exists */
- CloseHandle(hmap);
- errno = EEXIST;
- return -1;
- }
- else if (!hmap)
- {
- /* Unable to get shared memory */
- _dosmaperr(GetLastError());
- return -1;
- }
-
- return (int) hmap;
-}