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

Reply via email to