Index: src/backend/postmaster/postmaster.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.451 diff -c -r1.451 postmaster.c *** src/backend/postmaster/postmaster.c 15 May 2005 00:26:18 -0000 1.451 --- src/backend/postmaster/postmaster.c 4 Jun 2005 12:29:17 -0000 *************** *** 332,338 **** pid_t PostmasterPid; #ifdef WIN32 HANDLE PostmasterHandle; ! HANDLE initial_signal_pipe; HANDLE syslogPipe[2]; #else int syslogPipe[2]; --- 332,338 ---- pid_t PostmasterPid; #ifdef WIN32 HANDLE PostmasterHandle; ! HANDLE initial_signal_handles[N_SIGNALING_HANDLES]; HANDLE syslogPipe[2]; #else int syslogPipe[2]; *************** *** 3561,3567 **** #define write_inheritable_socket(dest, src, childpid) (*(dest) = (src)) #define read_inheritable_socket(dest, src) (*(dest) = *(src)) #else ! static void write_duplicated_handle(HANDLE *dest, HANDLE src, HANDLE child); static void write_inheritable_socket(InheritableSocket *dest, SOCKET src, pid_t childPid); static void read_inheritable_socket(SOCKET *dest, InheritableSocket *src); --- 3561,3567 ---- #define write_inheritable_socket(dest, src, childpid) (*(dest) = (src)) #define read_inheritable_socket(dest, src) (*(dest) = *(src)) #else ! static void write_duplicated_handles(int num, HANDLE *dest, HANDLE *src, HANDLE child); static void write_inheritable_socket(InheritableSocket *dest, SOCKET src, pid_t childPid); static void read_inheritable_socket(SOCKET *dest, InheritableSocket *src); *************** *** 3606,3613 **** #ifdef WIN32 param->PostmasterHandle = PostmasterHandle; ! write_duplicated_handle(¶m->initial_signal_pipe, ! pgwin32_create_signal_listener(childPid), childProcess); #endif --- 3606,3617 ---- #ifdef WIN32 param->PostmasterHandle = PostmasterHandle; ! ! /* Create signaling area for my child */ ! pgwin32_create_signaling_area(childPid); ! write_duplicated_handles(N_SIGNALING_HANDLES, ! param->initial_signal_handles, ! pgwin32_initial_signal_handles, childProcess); #endif *************** *** 3626,3651 **** #ifdef WIN32 /* ! * Duplicate a handle for usage in a child process, and write the child ! * process instance of the handle to the parameter file. */ static void ! write_duplicated_handle(HANDLE *dest, HANDLE src, HANDLE childProcess) { ! HANDLE hChild = INVALID_HANDLE_VALUE; ! if (!DuplicateHandle(GetCurrentProcess(), ! src, ! childProcess, ! &hChild, ! 0, ! TRUE, ! DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) ! ereport(ERROR, ! (errmsg_internal("could not duplicate handle to be written to backend parameter file: error code %d", ! (int) GetLastError()))); ! *dest = hChild; } /* --- 3630,3667 ---- #ifdef WIN32 /* ! * Duplicate handles for usage in a child process, and write the child ! * process instance of the handles to the parameter file. */ static void ! write_duplicated_handles(int num, HANDLE *dest, HANDLE *src, HANDLE childProcess) { ! int i, j; ! HANDLE hChild; ! for (i = 0; i < num; i++) ! { ! hChild = INVALID_HANDLE_VALUE; ! ! if (!DuplicateHandle(GetCurrentProcess(), ! src[i], ! childProcess, ! &hChild, ! 0, ! TRUE, ! DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) ! { ! /* close previousely duplicated handles */ ! for (j = 0; j < i; j++) ! CloseHandle(dest[j]); ! ! ereport(ERROR, ! (errmsg_internal("could not duplicate handle to be written to backend parameter file: error code %d", ! (int) GetLastError()))); ! } ! dest[i] = hChild; ! } } /* *************** *** 3808,3814 **** #ifdef WIN32 PostmasterHandle = param->PostmasterHandle; ! pgwin32_initial_signal_pipe = param->initial_signal_pipe; #endif memcpy(&syslogPipe, ¶m->syslogPipe, sizeof(syslogPipe)); --- 3824,3832 ---- #ifdef WIN32 PostmasterHandle = param->PostmasterHandle; ! memcpy(pgwin32_initial_signal_handles, ! param->initial_signal_handles, ! sizeof(HANDLE) * N_SIGNALING_HANDLES); #endif memcpy(&syslogPipe, ¶m->syslogPipe, sizeof(syslogPipe));