From 366682fb668d20d0874961e6421edbc96e3d1ac1 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 29 Apr 2006 20:52:56 +0000
Subject: [PATCH] Remove sema.c, superseded by win32_sema.c.

---
 src/backend/port/win32/Makefile |   6 +-
 src/backend/port/win32/sema.c   | 270 --------------------------------
 2 files changed, 3 insertions(+), 273 deletions(-)
 delete mode 100644 src/backend/port/win32/sema.c

diff --git a/src/backend/port/win32/Makefile b/src/backend/port/win32/Makefile
index bb12ae375c9..67d6df8f0e2 100644
--- a/src/backend/port/win32/Makefile
+++ b/src/backend/port/win32/Makefile
@@ -1,10 +1,10 @@
 #-------------------------------------------------------------------------
 #
 # Makefile--
-#    Makefile for port/win32
+#    Makefile for backend/port/win32
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/backend/port/win32/Makefile,v 1.6 2004/08/29 00:38:03 momjian Exp $
+#    $PostgreSQL: pgsql/src/backend/port/win32/Makefile,v 1.7 2006/04/29 20:52:56 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -12,7 +12,7 @@ subdir = src/backend/port/win32
 top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 
-OBJS = sema.o shmem.o timer.o socket.o signal.o security.o error.o
+OBJS = shmem.o timer.o socket.o signal.o security.o error.o
 
 all: SUBSYS.o
 
diff --git a/src/backend/port/win32/sema.c b/src/backend/port/win32/sema.c
deleted file mode 100644
index 03e0cfd995f..00000000000
--- a/src/backend/port/win32/sema.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * sema.c
- *	  Microsoft Windows Win32 Semaphores Emulation
- *
- * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
- *
- * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/port/win32/sema.c,v 1.13 2006/04/09 19:21:34 tgl Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-#include "postgres.h"
-#include "storage/shmem.h"
-
-#include <errno.h>
-
-typedef struct
-{
-	int			m_numSems;
-	off_t		m_semaphoreHandles;
-	/* offset from beginning of header */
-	off_t		m_semaphoreCounts;
-	/* offset from beginning of header */
-}	win32_sem_set_hdr;
-
-/* Control of a semaphore pool. The pool is an area in which we stored all
-** the semIds of the pool. The first long is the number of semaphore
-** allocated in the pool followed by semaphore handles
-*/
-
-int
-semctl(int semId, int semNum, int flag, union semun semun)
-{
-	win32_sem_set_hdr *the_set = (win32_sem_set_hdr *) MAKE_PTR(semId);
-
-	/* semNum might be 0 */
-	/* semun.array contains the sem initial values */
-	int		   *sem_counts = (int *) ((off_t) the_set + the_set->m_semaphoreCounts);
-
-	/* Fix the count of all sem of the pool to semun.array */
-	if (flag == SETALL)
-	{
-		int			i;
-		struct sembuf sops;
-
-		sops.sem_flg = IPC_NOWAIT;
-
-		for (i = 0; i < the_set->m_numSems; ++i)
-		{
-			if (semun.array[i] == sem_counts[i])
-				continue;		/* Nothing to do */
-
-			if (semun.array[i] < sem_counts[i])
-				sops.sem_op = -1;
-			else
-				sops.sem_op = 1;
-
-			sops.sem_num = i;
-
-			/* Quickly lock/unlock the semaphore (if we can) */
-			if (semop(semId, &sops, 1) < 0)
-				return -1;
-		}
-		return 1;
-	}
-
-	/* Fix the count of one semaphore to semun.val */
-	else if (flag == SETVAL)
-	{
-		if (semun.val != sem_counts[semNum])
-		{
-			struct sembuf sops;
-
-			sops.sem_flg = IPC_NOWAIT;
-			sops.sem_num = semNum;
-
-			if (semun.val < sem_counts[semNum])
-				sops.sem_op = -1;
-			else
-				sops.sem_op = 1;
-
-			/* Quickly lock/unlock the semaphore (if we can) */
-			if (semop(semId, &sops, 1) < 0)
-				return -1;
-		}
-
-		return 1;
-	}
-
-	/* Delete the pool */
-	else if (flag == IPC_RMID)
-	{
-		int			i;
-		HANDLE	   *sem_handles = (HANDLE *) ((off_t) the_set + the_set->m_semaphoreHandles);
-
-		/* Loop over all semaphore to delete them */
-		for (i = 0; i < the_set->m_numSems; ++i)
-			CloseHandle(sem_handles[i]);
-
-		return 1;
-	}
-
-	/* Get the current semaphore count */
-	else if (flag == GETNCNT)
-		return the_set->m_numSems;
-
-	/* Get the current semaphore count of the first semaphore in the pool */
-	else if (flag == GETVAL)
-		return sem_counts[semNum];
-
-	/* Other commands not yet supported */
-	else
-	{
-		errno = EINVAL;
-		return -1;
-	}
-}
-
-/* Find a pool id based on IPC key */
-int
-semget(int semKey, int semNum, int flags)
-{
-	char		semname[32];
-	char		cur_num[20];
-	DWORD		last_error;
-	char	   *num_part;
-	bool		ans = true;
-	SECURITY_ATTRIBUTES sec_attrs;
-	HANDLE		cur_handle;
-	bool		found = false;
-	Size		sem_set_size = sizeof(win32_sem_set_hdr) + semNum * (sizeof(HANDLE) + sizeof(int));
-	HANDLE	   *sem_handles = NULL;
-	int		   *sem_counts = NULL;
-	int			i;
-	win32_sem_set_hdr *new_set;
-
-	sec_attrs.nLength = sizeof(sec_attrs);
-	sec_attrs.lpSecurityDescriptor = NULL;
-	sec_attrs.bInheritHandle = TRUE;
-
-	sprintf(semname, "PG_SEMSET.%d.", semKey);
-	num_part = semname + strlen(semname);
-
-	strcpy(num_part, _itoa(_getpid() * -1, cur_num, 10));		/* For shared memory,
-																 * include the pid */
-	new_set = (win32_sem_set_hdr *) ShmemInitStruct(semname, sem_set_size, &found);
-
-	if (found)
-	{
-		/* This should *never* happen */
-		errno = EEXIST;
-		return -1;
-	}
-
-	new_set->m_numSems = semNum;
-	new_set->m_semaphoreHandles = sizeof(win32_sem_set_hdr);
-	/* array starts after header */
-	new_set->m_semaphoreCounts = new_set->m_semaphoreHandles + (sizeof(HANDLE) * semNum);
-
-	sem_handles = (HANDLE *) ((off_t) new_set + new_set->m_semaphoreHandles);
-	sem_counts = (int *) ((off_t) new_set + new_set->m_semaphoreCounts);
-
-	for (i = 0; i < semNum && ans; ++i)
-	{
-		strcpy(num_part, _itoa(i, cur_num, 10));
-
-		if (flags & IPC_CREAT)
-			cur_handle = CreateSemaphore(&sec_attrs, 0, 1, semname);
-		else
-			cur_handle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, TRUE, semname);
-
-		sem_handles[i] = cur_handle;
-
-		last_error = GetLastError();
-		if (!cur_handle)
-		{
-			errno = EACCES;
-			ans = false;
-		}
-		else if (last_error == ERROR_ALREADY_EXISTS && (flags & (IPC_CREAT | IPC_EXCL)))
-		{
-			errno = EEXIST;
-			ans = false;
-		}
-	}
-
-	if (ans)
-		return MAKE_OFFSET(new_set);
-	else
-	{
-		int			i;
-
-		/* Blow away what we've got right now... */
-		for (i = 0; i < semNum; ++i)
-		{
-			if (sem_handles[i])
-				CloseHandle(sem_handles[i]);
-			else
-				break;
-		}
-
-		return -1;
-	}
-}
-
-/* Acquire or release in the semaphore pool */
-int
-semop(int semId, struct sembuf * sops, int nsops)
-{
-	win32_sem_set_hdr *the_set = (win32_sem_set_hdr *) MAKE_PTR(semId);
-	HANDLE	   *sem_handles = (HANDLE *) ((off_t) the_set + the_set->m_semaphoreHandles);
-	int		   *sem_counts = (int *) ((off_t) the_set + the_set->m_semaphoreCounts);
-	HANDLE		cur_handle;
-
-	if (nsops != 1)
-	{
-		/*
-		 * Not supported (we return on 1st success, and don't cancel earlier
-		 * ops)
-		 */
-		errno = E2BIG;
-		return -1;
-	}
-
-	cur_handle = sem_handles[sops[0].sem_num];
-
-	if (sops[0].sem_op == -1)
-	{
-		DWORD		ret;
-		HANDLE		wh[2];
-
-		wh[0] = cur_handle;
-		wh[1] = pgwin32_signal_event;
-
-		ret = WaitForMultipleObjectsEx(2, wh, FALSE, (sops[0].sem_flg & IPC_NOWAIT) ? 0 : INFINITE, TRUE);
-
-		if (ret == WAIT_OBJECT_0)
-		{
-			/* We got it! */
-			sem_counts[sops[0].sem_num]--;
-			return 0;
-		}
-		else if (ret == WAIT_OBJECT_0 + 1 || ret == WAIT_IO_COMPLETION)
-		{
-			/* Signal event is set - we have a signal to deliver */
-			pgwin32_dispatch_queued_signals();
-			errno = EINTR;
-		}
-		else if (ret == WAIT_TIMEOUT)
-			/* Couldn't get it */
-			errno = EAGAIN;
-		else
-			errno = EIDRM;
-	}
-	else if (sops[0].sem_op > 0)
-	{
-		/* Don't want the lock anymore */
-		sem_counts[sops[0].sem_num]++;
-		ReleaseSemaphore(cur_handle, sops[0].sem_op, NULL);
-		return 0;
-	}
-	else
-		/* Not supported */
-		errno = ERANGE;
-
-	/* If we get down here, then something is wrong */
-	return -1;
-}
-- 
GitLab