rbb         99/06/29 08:52:14

  Modified:    apr/include apr_win.h
               apr/misc/win32 misc.def misc.dsp start.c
               apr/network_io/win32 network_io.dsp
               apr/test client.dsp server.dsp test.dsw testfile.dsp
                        testproc.dsp testsock.dsp timetest.dsp
               apr/threadproc/win32 proc.c
               include  apr_general.h
  Added:       apr/signal/win32 signal.c signal.def signal.dsp
               apr/test testsig.c
  Log:
  The abstracts out asynchsignals on Windows.  This is NOT safe code to put in 
a production
  server yet, but it works, and that's more than it was doing earlier today.
  
  Revision  Changes    Path
  1.5       +37 -1     apache-apr/apr/include/apr_win.h
  
  Index: apr_win.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/include/apr_win.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- apr_win.h 1999/06/18 19:10:58     1.4
  +++ apr_win.h 1999/06/29 15:52:07     1.5
  @@ -65,9 +65,42 @@
   
   typedef enum {APR_WIN_NT, APR_WIN_95, APR_WIN_98} ap_oslevel_e;
   
  +#define SIGHUP     1
  +/* 2 is used for SIGINT on windows */
  +#define SIGQUIT    3
  +/* 4 is used for SIGILL on windows */
  +#define SIGTRAP    5
  +#define SIGIOT     6
  +#define SIGBUS     7
  +/* 8 is used for SIGFPE on windows */
  +#define SIGKILL    9
  +#define SIGUSR1    10
  +/* 11 is used for SIGSEGV on windows */
  +#define SIGUSR2    12
  +#define SIGPIPE    13
  +#define SIGALRM    14
  +/* 15 is used for SIGTERM on windows */
  +#define SIGSTKFLT  16
  +#define SIGCHLD    17 
  +#define SIGCONT    18
  +#define SIGSTOP    19
  +#define SIGTSTP    20
  +/* 21 is used for SIGBREAK on windows */
  +/* 22 is used for SIGABRT on windows */
  +#define SIGTTIN    23
  +#define SIGTTOU    24
  +#define SIGURG     25
  +#define SIGXCPU    26
  +#define SIGXFSZ    27
  +#define SIGVTALRM  28
  +#define SIGPROF    29
  +#define SIGWINCH   30
  +#define SIGIO      31
  +
   typedef _off_t      off_t;
   typedef int         pid_t;
  -typedef void Sigfunc(int);
  +typedef void (Sigfunc)(int);
  +typedef int ap_signum_t;
   
   #define __attribute__(__x) 
   #define APR_INLINE 
  @@ -82,6 +115,9 @@
   #define sleep(t)                 Sleep(t * 1000)
   
   time_t WinTimeToUnixTime(FILETIME *);
  +unsigned __stdcall SignalHandling(void *);
  +
  +int thread_ready(void);
   
   #endif  /*APR_WIN_H*/
   #endif  /*WIN32*/
  
  
  
  1.4       +2 -1      apache-apr/apr/misc/win32/misc.def
  
  Index: misc.def
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/misc/win32/misc.def,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- misc.def  1999/06/23 15:00:08     1.3
  +++ misc.def  1999/06/29 15:52:08     1.4
  @@ -14,4 +14,5 @@
        WinTimeToUnixTime   @7
        ap_get_oslevel   @8
       ap_get_userdata   @9
  -    ap_set_userdata   @10
  \ No newline at end of file
  +    ap_set_userdata   @10
  +    ap_initialize   @11
  \ No newline at end of file
  
  
  
  1.3       +1 -1      apache-apr/apr/misc/win32/misc.dsp
  
  Index: misc.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/misc/win32/misc.dsp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- misc.dsp  1999/06/15 17:43:14     1.2
  +++ misc.dsp  1999/06/29 15:52:08     1.3
  @@ -77,7 +77,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib ws2_32.lib ..\..\lib\Debug\lib.lib /nologo /subsystem:windows /dll 
/debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib ws2_32.lib ..\..\lib\Debug\lib.lib 
..\..\signal\win32\Debug\signal.lib /nologo /subsystem:windows /dll /debug 
/machine:I386 /pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.6       +16 -0     apache-apr/apr/misc/win32/start.c
  
  Index: start.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/misc/win32/start.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- start.c   1999/06/23 15:00:08     1.5
  +++ start.c   1999/06/29 15:52:08     1.6
  @@ -60,6 +60,7 @@
   #include "apr_pools.h"
   #include "apr_lib.h"
   #include <string.h>
  +#include <process.h>
   
   ap_status_t clean_cont(void *data)
   {
  @@ -194,3 +195,18 @@
       return APR_ENOCONT;
   }
   
  +/* This puts one thread in a Listen for signals mode */
  +ap_status_t ap_initialize(void)
  +{
  +    unsigned tid;
  +
  +    if (_beginthreadex(NULL, 0, SignalHandling, NULL, 0, &tid) == 0) {
  +        return APR_EEXIST;
  +    }
  +
  +    while (thread_ready() != 1) {
  +        sleep(1);
  +    }
  +
  +    return APR_SUCCESS;
  +}
  
  
  
  1.2       +1 -1      apache-apr/apr/network_io/win32/network_io.dsp
  
  Index: network_io.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/network_io/win32/network_io.dsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- network_io.dsp    1999/06/14 19:11:16     1.1
  +++ network_io.dsp    1999/06/29 15:52:09     1.2
  @@ -79,7 +79,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib  ws2_32.lib ..\..\lib\Debug\lib.lib 
..\..\misc\win32\Debug\misc.lib /nologo /subsystem:windows /dll /debug 
/machine:I386 /pdbtype:sept
  +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib ws2_32.lib ..\..\lib\Debug\lib.lib ..\..\misc\win32\Debug\misc.lib 
/nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.1                  apache-apr/apr/signal/win32/signal.c
  
  Index: signal.c
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  #include "apr_lib.h"
  #include "apr_general.h"
  #include "apr_win.h"
  #include "apr_errno.h"
  #include <windows.h>
  #include <process.h>
  
  static char    *NewEvent;
  static Sigfunc *sig_handler;
  
  volatile int ready = 0;
  
  ap_status_t ap_create_signal(ap_context_t *cont, ap_signum_t signum)
  {
      char *EventName;
      int ppid;
      char pidstr[10];
      char sigstr[4];
      SECURITY_ATTRIBUTES sa;
  
      ppid = _getpid(); 
  
      _itoa(ppid, pidstr, 10);
      _itoa(signum, sigstr, 10);
  
      EventName = ap_pstrcat(cont, "APR", pidstr, sigstr, NULL);
  
      sa.nLength = sizeof(sa);
      sa.bInheritHandle = TRUE;
      sa.lpSecurityDescriptor = NULL;
  
      if (CreateEvent(&sa, TRUE, FALSE, EventName) == NULL) {
          return APR_EEXIST;
      }
      return APR_SUCCESS;
  }
  
  ap_status_t ap_signal(ap_context_t *cont, ap_signum_t signum)
  {
      HANDLE event;
      char *EventName;
      char *sigstr;
      int ppid;
      char pidstr[10];
  
      ppid = _getpid(); 
  
      _itoa(ppid, pidstr, 10);
      _itoa(signum, sigstr, 10);
  
      EventName = ap_pstrcat(cont, "APR", pidstr, sigstr, NULL);
      event = OpenEvent(EVENT_ALL_ACCESS, FALSE, EventName);
  
      if (event == NULL) {
          return APR_EEXIST;
      }
  
      if (SetEvent(event) == 0) {
          return APR_EEXIST;
      }
      return APR_SUCCESS;
  }
  
  ap_status_t ap_setup_signal(ap_context_t *cont, ap_signum_t signum, Sigfunc 
*func)
  {
      HANDLE event;
      char ppid[20];
      char *sigstr;
  
      event = OpenEvent(EVENT_ALL_ACCESS, FALSE, "EventRegister");
  
      if (GetEnvironmentVariable("parentpid", ppid, 20) == 0) {
          return APR_EEXIST;
      }
  
      sigstr = (char *)ap_palloc(cont, sizeof(int) * 10);
      _itoa(signum, sigstr, 10);
  
      NewEvent = ap_pstrcat(cont, "APR", ppid, sigstr, NULL);
      sig_handler = func;
  
      if (event == NULL) {
          return APR_EEXIST;
      }
  
      if (SetEvent(event)) {
          return APR_SUCCESS;
      }
      
      return APR_EEXIST;
  }
  
  unsigned int __stdcall SignalHandling(void *data)
  {    
      int i = 1;
      HANDLE eventlist[MAXIMUM_WAIT_OBJECTS];
      Sigfunc *funclist[MAXIMUM_WAIT_OBJECTS];
      DWORD rv;
      
      if ((eventlist[0] = CreateEvent(NULL, TRUE, FALSE, "EventRegister")) == 
NULL) {
          return APR_EEXIST;
      }
  
      sig_handler = NULL;    
  
      while (1) {
          ready = 1;
          rv = WaitForMultipleObjects(i, eventlist, FALSE, INFINITE);
          if (rv == WAIT_FAILED) {
              exit(-1);
          }
          else if (rv == WAIT_OBJECT_0){
              eventlist[i] = OpenEvent(EVENT_ALL_ACCESS, TRUE, NewEvent);
              funclist[i] = sig_handler;
              i++;
              ResetEvent(eventlist[0]);
          }
          else { 
              funclist[rv - WAIT_OBJECT_0](0);
              ResetEvent(eventlist[rv - WAIT_OBJECT_0]);
          }
      }
  }
  
  int thread_ready(void)
  {
      return ready;
  }
  
  
  1.1                  apache-apr/apr/signal/win32/signal.def
  
  Index: signal.def
  ===================================================================
  ; signal.def : 
  
  LIBRARY signal
  DESCRIPTION ''
  
  EXPORTS
        ; Add new API calls to the end of this list.
        ap_create_signal   @1
      ap_setup_signal   @2
      SignalHandling   @3
      ap_signal    @4
      thread_ready   @5
  
  
  
  1.1                  apache-apr/apr/signal/win32/signal.dsp
  
  Index: signal.dsp
  ===================================================================
  # Microsoft Developer Studio Project File - Name="signal" - Package Owner=<4>
  # Microsoft Developer Studio Generated Build File, Format Version 5.00
  # ** DO NOT EDIT **
  
  # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
  
  CFG=signal - Win32 Debug
  !MESSAGE This is not a valid makefile. To build this project using NMAKE,
  !MESSAGE use the Export Makefile command and run
  !MESSAGE 
  !MESSAGE NMAKE /f "signal.mak".
  !MESSAGE 
  !MESSAGE You can specify a configuration when running NMAKE
  !MESSAGE by defining the macro CFG on the command line. For example:
  !MESSAGE 
  !MESSAGE NMAKE /f "signal.mak" CFG="signal - Win32 Debug"
  !MESSAGE 
  !MESSAGE Possible choices for configuration are:
  !MESSAGE 
  !MESSAGE "signal - Win32 Release" (based on "Win32 (x86) Dynamic-Link 
Library")
  !MESSAGE "signal - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
  !MESSAGE 
  
  # Begin Project
  # PROP Scc_ProjName ""
  # PROP Scc_LocalPath ""
  CPP=cl.exe
  MTL=midl.exe
  RSC=rc.exe
  
  !IF  "$(CFG)" == "signal - Win32 Release"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 0
  # PROP BASE Output_Dir "Release"
  # PROP BASE Intermediate_Dir "Release"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 0
  # PROP Output_Dir "Release"
  # PROP Intermediate_Dir "Release"
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" 
/YX /FD /c
  # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX 
/FD /c
  # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
  # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
  # ADD BASE RSC /l 0x409 /d "NDEBUG"
  # ADD RSC /l 0x409 /d "NDEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
  # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
  
  !ELSEIF  "$(CFG)" == "signal - Win32 Debug"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 1
  # PROP BASE Output_Dir "Debug"
  # PROP BASE Intermediate_Dir "Debug"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 1
  # PROP Output_Dir "Debug"
  # PROP Intermediate_Dir "Debug"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /YX /FD /c
  # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\include" /I 
"..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
  # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
  # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
  # ADD BASE RSC /l 0x409 /d "_DEBUG"
  # ADD RSC /l 0x409 /d "_DEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
  # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib ..\..\lib\Debug\lib.lib /nologo /subsystem:windows /dll /debug 
/machine:I386 /pdbtype:sept
  
  !ENDIF 
  
  # Begin Target
  
  # Name "signal - Win32 Release"
  # Name "signal - Win32 Debug"
  # Begin Source File
  
  SOURCE=.\signal.c
  # End Source File
  # Begin Source File
  
  SOURCE=.\signal.def
  # End Source File
  # End Target
  # End Project
  
  
  
  1.5       +1 -1      apache-apr/apr/test/client.dsp
  
  Index: client.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/client.dsp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- client.dsp        1999/06/24 14:16:15     1.4
  +++ client.dsp        1999/06/29 15:52:11     1.5
  @@ -73,7 +73,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo 
/subsystem:console /debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
..\signal\win32\Debug\signal.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.5       +1 -1      apache-apr/apr/test/server.dsp
  
  Index: server.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/server.dsp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- server.dsp        1999/06/24 14:16:17     1.4
  +++ server.dsp        1999/06/29 15:52:11     1.5
  @@ -73,7 +73,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo 
/subsystem:console /debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
..\signal\win32\Debug\signal.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.4       +12 -0     apache-apr/apr/test/test.dsw
  
  Index: test.dsw
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/test.dsw,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- test.dsw  1999/06/18 19:11:00     1.3
  +++ test.dsw  1999/06/29 15:52:11     1.4
  @@ -51,6 +51,18 @@
   
   
###############################################################################
   
  +Project: "testsig"=".\testsig.dsp" - Package Owner=<4>
  +
  +Package=<5>
  +{{{
  +}}}
  +
  +Package=<4>
  +{{{
  +}}}
  +
  
+###############################################################################
  +
   Project: "testsock"=".\testsock.dsp" - Package Owner=<4>
   
   Package=<5>
  
  
  
  1.7       +1 -1      apache-apr/apr/test/testfile.dsp
  
  Index: testfile.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/testfile.dsp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- testfile.dsp      1999/06/24 14:16:18     1.6
  +++ testfile.dsp      1999/06/29 15:52:11     1.7
  @@ -74,7 +74,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo 
/subsystem:console /debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
..\signal\win32\Debug\signal.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.6       +1 -1      apache-apr/apr/test/testproc.dsp
  
  Index: testproc.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/testproc.dsp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- testproc.dsp      1999/06/24 14:16:18     1.5
  +++ testproc.dsp      1999/06/29 15:52:11     1.6
  @@ -74,7 +74,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo 
/subsystem:console /debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
..\signal\win32\Debug\signal.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.5       +1 -1      apache-apr/apr/test/testsock.dsp
  
  Index: testsock.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/testsock.dsp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- testsock.dsp      1999/06/24 14:16:18     1.4
  +++ testsock.dsp      1999/06/29 15:52:11     1.5
  @@ -74,7 +74,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo 
/subsystem:console /debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
..\signal\win32\Debug\signal.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.4       +1 -1      apache-apr/apr/test/timetest.dsp
  
  Index: timetest.dsp
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/timetest.dsp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- timetest.dsp      1999/06/24 14:16:18     1.3
  +++ timetest.dsp      1999/06/29 15:52:12     1.4
  @@ -74,7 +74,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  -# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo 
/subsystem:console /debug /machine:I386 /pdbtype:sept
  +# ADD LINK32 ..\locks\win32\debug\locks.lib ..\lib\Debug\lib.lib 
..\misc\win32\Debug\misc.lib ..\threadproc\win32\Debug\threadproc.lib 
..\file_io\win32\Debug\file_io.lib ..\time\win32\Debug\time.lib 
..\locks\win32\Debug\locks.lib ..\network_io\win32\Debug\network_io.lib 
..\signal\win32\Debug\signal.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
   
   !ENDIF 
   
  
  
  
  1.1                  apache-apr/apr/test/testsig.c
  
  Index: testsig.c
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #include "apr_thread_proc.h"
  #include "apr_errno.h"
  #include "apr_general.h"
  #include "apr_lib.h"
  #include "errno.h"
  #ifndef WIN32
  #include <unistd.h>
  #endif
  #include <stdio.h>
  #include <signal.h>
  #include <string.h>
  
  int time_to_die = 0;
  
  void hup_handler(int sig)
  {
      fprintf(stdout, "I got the signal\n");
      time_to_die++;    
  }
  
  int main(int argc, char *argv[])
  {
      ap_context_t *context;
      ap_proc_t *newproc;
      ap_procattr_t *attr;
      char *args[3];
  
      ap_initialize();
  
      ap_create_context(NULL, NULL, &context);
  
      if (argc > 1) {
  
  
          ap_setup_signal(context, APR_SIGHUP, hup_handler);
  
          while(time_to_die == 0) {
              sleep(1);
          }
          return (1);
      }
  
      fprintf(stdout, "Creating new signal.......");
      if (ap_create_signal(context, APR_SIGHUP) != APR_SUCCESS) {
          fprintf(stderr, "Could not create attr\n");
          exit(-1);
      }
      fprintf(stdout, "OK\n");
  
      if (ap_createprocattr_init(context, &attr) != APR_SUCCESS) {
          fprintf(stderr, "Could not create attr\n");
          exit(-1);;
      }
      ap_setprocattr_detach(attr, FALSE);
  
      args[0] = ap_pstrdup(context, "testsig");
      args[1] = ap_pstrdup(context, "-X");
      args[2] = NULL;
      
      if (ap_create_process(context, "../testproc", args, NULL, attr, &newproc) 
!= APR_SUCCESS) {
          fprintf(stderr, "Could not create the new process\n");
          exit(-1);
      }
  
  /*    sleep(100);  /* Just wait a bit to let the child catch up.  Not a great 
idea, but
                    * this is just a test program, so it's okay in my book.  :) 
*/
      fprintf(stdout, "Sending the signal.......");
      ap_signal(context, APR_SIGHUP);    
  
      ap_wait_proc(newproc, APR_WAIT);
  
      return(1);
  }
  
  
  
  
  1.5       +41 -2     apache-apr/apr/threadproc/win32/proc.c
  
  Index: proc.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/win32/proc.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- proc.c    1999/06/24 14:16:19     1.4
  +++ proc.c    1999/06/29 15:52:13     1.5
  @@ -62,6 +62,7 @@
   #include "apr_lib.h"
   #include <signal.h>
   #include <string.h>
  +#include <process.h>
   
   ap_status_t ap_createprocattr_init(ap_context_t *cont, struct procattr_t 
**new)
   {
  @@ -140,11 +141,16 @@
                                  char *const args[], char **env, 
                                  struct procattr_t *attr, struct proc_t **new)
   {
  -    int i;
  +    int i, iEnvBlockLen;
        char *cmdline;
        HANDLE hCurrentProcess;
        HANDLE hParentindup, hParentoutdup,hParenterrdup;
  +    char ppid[20];
  +    char *envstr;
  +    char *pEnvBlock, *pNext;
   
  +
  +
       (*new) = (struct proc_t *)ap_palloc(cont, sizeof(struct proc_t));
   
       if ((*new) == NULL) {
  @@ -233,8 +239,41 @@
                    attr->parent_err->filehand = hParenterrdup;
                }
       }
  +
  +    _itoa(_getpid(), ppid, 10);
  +    if (env) {
  +
  +        envstr = ap_pstrcat(cont, "parentpid=", ppid, NULL);
  +        /*
  +         * Win32's CreateProcess call requires that the environment
  +         * be passed in an environment block, a null terminated block of
  +         * null terminated strings.
  +         */  
  +        i = 0;
  +        iEnvBlockLen = 1;
  +        while (env[i]) {
  +            iEnvBlockLen += strlen(env[i]) + 1;
  +            i++;
  +        }
  +  
  +        pEnvBlock = (char *)ap_pcalloc(cont, iEnvBlockLen + strlen(envstr));
  +    
  +        i = 0;
  +        pNext = pEnvBlock;
  +        while (env[i]) {
  +            strcpy(pNext, env[i]);
  +            pNext = pNext + strlen(pNext) + 1;
  +            i++;
  +        }
  +        strcpy(pNext, envstr);        
  +    }
  +    else {
  +        SetEnvironmentVariable("parentpid", ppid);
  +        pEnvBlock = NULL;
  +   } 
  +    
   
  -    if (CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, env, 
attr->currdir, 
  +    if (CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, pEnvBlock, 
attr->currdir, 
                &attr->si, &(*new)->pi)) {
                if (attr->detached) {
                        CloseHandle((*new)->pi.hProcess);
  
  
  
  1.19      +99 -0     apache-apr/include/apr_general.h
  
  Index: apr_general.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/include/apr_general.h,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- apr_general.h     1999/06/21 17:45:53     1.18
  +++ apr_general.h     1999/06/29 15:52:14     1.19
  @@ -70,6 +70,7 @@
   #include <sys/types.h>
   #endif
   #ifdef WIN32
  +#include "apr_win.h"
   #include <windows.h>
   #endif
   #include "apr_errno.h"
  @@ -84,6 +85,8 @@
   #define TRUE 1
   #define FALSE 0
   
  +#define MAXIMUM_WAIT_OBJECTS 64
  +
   typedef short             ap_int16_t;
   typedef unsigned short    ap_uint16_t;
   typedef int               ap_int32_t;
  @@ -106,6 +109,97 @@
   
   typedef struct context_t  ap_context_t;
   
  +#if SIGHUP
  +#define APR_SIGHUP SIGHUP
  +#endif
  +#ifdef SIGINT
  +#define APR_SIGINT SIGINT
  +#endif
  +#ifdef SIGQUIT
  +#define APR_SIGQUIT SIGQUIT
  +#endif
  +#ifdef SIGILL
  +#define APR_SIGILL SIGILL
  +#endif
  +#ifdef SIGTRAP
  +#define APR_SIGTRAP SIGTRAP
  +#endif
  +#ifdef SIGABRT
  +#define APR_SIGABRT SIGABRT
  +#endif
  +#ifdef SIGIOT
  +#define APR_SIGIOT SIGIOT
  +#endif
  +#ifdef SIGBUS
  +#define APR_SIGBUS SIGBUS
  +#endif
  +#ifdef SIGFPE
  +#define APR_SIGFPE SIGFPE
  +#endif
  +#ifdef SIGKILL
  +#define APR_SIGKILL SIGKILL
  +#endif
  +#ifdef SIGUSR1
  +#define APR_SIGUSR1 SIGUSR1
  +#endif
  +#ifdef SIGSEGV
  +#define APR_SIGSEGV SIGSEGV
  +#endif
  +#ifdef SIGUSR2
  +#define APR_SIGUSR2 SIGUSR2
  +#endif
  +#ifdef SIGPIPE
  +#define APR_SIGPIPE SIGPIPE
  +#endif
  +#ifdef SIGALRM
  +#define APR_SIGALRM SIGALRM
  +#endif
  +#ifdef SIGTERM
  +#define APR_SIGTERM SIGTERM
  +#endif
  +#ifdef SIGSTKFLT
  +#define APR_SIGSTKFLT SIGSTKFLT
  +#endif
  +#ifdef SIGCHLD
  +#define APR_SIGCHLD SIGCHLD
  +#endif
  +#ifdef SIGCONT
  +#define APR_SIGCONT SIGCONT
  +#endif
  +#ifdef SIGSTOP
  +#define APR_SIGSTOP SIGSTOP
  +#endif
  +#ifdef SIGTSTP
  +#define APR_SIGTSTP SIGTSTP
  +#endif
  +#ifdef SIGTTIN
  +#define APR_SIGTTIN SIGTTIN
  +#endif
  +#ifdef SIGTTOU
  +#define APR_SIGTTOU SIGTTOU
  +#endif
  +#ifdef SIGURG
  +#define APR_SIGURG SIGURG
  +#endif
  +#ifdef SIGXCPU
  +#define APR_SIGXCPU SIGXCPU
  +#endif
  +#ifdef SIGXFSZ
  +#define APR_SIGXFSZ SIGXFSZ
  +#endif
  +#ifdef SIGVTALRM
  +#define APR_SIGVTALRM SIGVTALRM
  +#endif
  +#ifdef SIGPROF
  +#define APR_SIGPROF SIGPROF
  +#endif
  +#ifdef SIGWINCH
  +#define APR_SIGWINCH SIGWINCH
  +#endif
  +#ifdef SIGIO
  +#define APR_SIGIO SIGIO
  +#endif
  +
   /* Context functions */
   ap_status_t ap_create_context(ap_context_t *, void *, ap_context_t **);
   ap_status_t ap_set_signal_safe(ap_context_t *, ap_int16_t);
  @@ -113,6 +207,11 @@
   ap_status_t ap_exit(ap_context_t *);
   ap_status_t ap_set_userdata(ap_context_t *, void *);
   ap_status_t ap_get_userdata(ap_context_t *, void **);
  +ap_status_t ap_initialize(void);
  +
  +ap_status_t ap_create_signal(ap_context_t *, ap_signum_t);
  +ap_status_t ap_signal(ap_context_t *, ap_signum_t);
  +ap_status_t ap_setup_signal(ap_context_t *, ap_signum_t, Sigfunc *);
   
   #ifdef __cplusplus
   }
  
  
  

Reply via email to