Magnus Hagander wrote:
> Seems it needs an implementation of the "pgwin32 special kill". Try
> stealing the one from backend/port/win32/signal.c (look for pqkill).
>
> Perhaps this function (not the rest of signal.c!) should be moved into
> port/, instead of backend/port. IIRC it depends on no other backend
> code.
OK, patch attached and applied, and new kill.c file that goes into
/port.
--
Bruce Momjian | http://candle.pha.pa.us
[EMAIL PROTECTED] | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: configure
===================================================================
RCS file: /cvsroot/pgsql-server/configure,v
retrieving revision 1.369
diff -c -c -r1.369 configure
*** configure 22 May 2004 00:34:49 -0000 1.369
--- configure 27 May 2004 13:05:41 -0000
***************
*** 12014,12019 ****
--- 12014,12020 ----
case $host_os in mingw*)
LIBOBJS="$LIBOBJS copydir.$ac_objext"
LIBOBJS="$LIBOBJS gettimeofday.$ac_objext"
+ LIBOBJS="$LIBOBJS kill.$ac_objext"
LIBOBJS="$LIBOBJS open.$ac_objext"
LIBOBJS="$LIBOBJS rand.$ac_objext" ;;
esac
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql-server/configure.in,v
retrieving revision 1.358
diff -c -c -r1.358 configure.in
*** configure.in 22 May 2004 00:34:49 -0000 1.358
--- configure.in 27 May 2004 13:05:43 -0000
***************
*** 891,896 ****
--- 891,897 ----
case $host_os in mingw*)
AC_LIBOBJ(copydir)
AC_LIBOBJ(gettimeofday)
+ AC_LIBOBJ(kill)
AC_LIBOBJ(open)
AC_LIBOBJ(rand) ;;
esac
Index: src/backend/port/win32/signal.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/port/win32/signal.c,v
retrieving revision 1.1
diff -c -c -r1.1 signal.c
*** src/backend/port/win32/signal.c 12 Apr 2004 16:19:18 -0000 1.1
--- src/backend/port/win32/signal.c 27 May 2004 13:05:48 -0000
***************
*** 152,197 ****
return prevfunc;
}
- /* signal sending */
- int
- pqkill(int pid, int sig)
- {
- char pipename[128];
- BYTE sigData = sig;
- BYTE sigRet = 0;
- DWORD bytes;
-
- if (sig >= PG_SIGNAL_COUNT || sig <= 0)
- {
- errno = EINVAL;
- return -1;
- }
- if (pid <= 0)
- {
- /* No support for process groups */
- errno = EINVAL;
- return -1;
- }
- wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%i", pid);
- if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
- {
- if (GetLastError() == ERROR_FILE_NOT_FOUND)
- errno = ESRCH;
- else if (GetLastError() == ERROR_ACCESS_DENIED)
- errno = EPERM;
- else
- errno = EINVAL;
- return -1;
- }
- if (bytes != 1 || sigRet != sig)
- {
- errno = ESRCH;
- return -1;
- }
-
- return 0;
- }
-
/*
* All functions below execute on the signal handler thread
* and must be synchronized as such!
--- 152,157 ----
Index: src/include/port/win32.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/win32.h,v
retrieving revision 1.23
diff -c -c -r1.23 win32.h
*** src/include/port/win32.h 22 Apr 2004 03:51:24 -0000 1.23
--- src/include/port/win32.h 27 May 2004 13:06:03 -0000
***************
*** 116,125 ****
#define SIG_ERR ((pqsigfunc)-1)
#define SIG_IGN ((pqsigfunc)1)
! #ifndef FRONTEND
! #define kill(pid,sig) pqkill(pid,sig)
! extern int pqkill(int pid, int sig);
#define pg_usleep(t) pgwin32_backend_usleep(t)
void pgwin32_backend_usleep(long microsec);
#endif
--- 116,125 ----
#define SIG_ERR ((pqsigfunc)-1)
#define SIG_IGN ((pqsigfunc)1)
! #define kill(pid,sig) pgkill(pid,sig)
! extern int pgkill(int pid, int sig);
+ #ifndef FRONTEND
#define pg_usleep(t) pgwin32_backend_usleep(t)
void pgwin32_backend_usleep(long microsec);
#endif
/*-------------------------------------------------------------------------
*
* kill.c
* kill()
*
* Copyright (c) 1996-2003, PostgreSQL Global Development Group
*
* This is a replacement version of kill for Win32 which sends
* signals that the backend can recognize.
*
* IDENTIFICATION
* $PostgreSQL: pgsql-server/src/port/pipe.c,v 1.4 2004/05/18 20:18:59 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#ifdef WIN32
/* signal sending */
int
pgkill(int pid, int sig)
{
char pipename[128];
BYTE sigData = sig;
BYTE sigRet = 0;
DWORD bytes;
if (sig >= PG_SIGNAL_COUNT || sig <= 0)
{
errno = EINVAL;
return -1;
}
if (pid <= 0)
{
/* No support for process groups */
errno = EINVAL;
return -1;
}
wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%i", pid);
if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
{
if (GetLastError() == ERROR_FILE_NOT_FOUND)
errno = ESRCH;
else if (GetLastError() == ERROR_ACCESS_DENIED)
errno = EPERM;
else
errno = EINVAL;
return -1;
}
if (bytes != 1 || sigRet != sig)
{
errno = ESRCH;
return -1;
}
return 0;
}
#endif
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings