Drops in the CreateProcess calls for Win32 (essentially wrapping up the
fork/exec portion of the port), and fixes a handful of whitespace issues Claudio Natoli
This commit is contained in:
parent
ca7a1f0c86
commit
4cdf51e646
@ -13,7 +13,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/main/main.c,v 1.70 2004/01/06 23:15:22 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/main/main.c,v 1.71 2004/01/11 03:49:31 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -87,6 +87,19 @@ main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
#endif /* NOFIXADE || NOPRINTADE */
|
#endif /* NOFIXADE || NOPRINTADE */
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
{
|
||||||
|
WSADATA wsaData;
|
||||||
|
int err = WSAStartup(MAKEWORD(2,2), &wsaData);
|
||||||
|
if (err != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: WSAStartup failed: %d\n",
|
||||||
|
argv[0], err);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __BEOS__
|
#ifdef __BEOS__
|
||||||
/* BeOS-specific actions on startup */
|
/* BeOS-specific actions on startup */
|
||||||
beos_startup(argc, argv);
|
beos_startup(argc, argv);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2001-2003, PostgreSQL Global Development Group
|
* Copyright (c) 2001-2003, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.52 2004/01/09 04:58:09 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.53 2004/01/11 03:49:31 momjian Exp $
|
||||||
* ----------
|
* ----------
|
||||||
*/
|
*/
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
@ -50,6 +50,9 @@
|
|||||||
#include "utils/ps_status.h"
|
#include "utils/ps_status.h"
|
||||||
#include "utils/syscache.h"
|
#include "utils/syscache.h"
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
extern pid_t win32_forkexec(const char* path, char *argv[]);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* GUC parameters
|
* GUC parameters
|
||||||
@ -402,10 +405,13 @@ pgstat_forkexec(STATS_PROCESS_TYPE procType)
|
|||||||
Assert(ac <= lengthof(av));
|
Assert(ac <= lengthof(av));
|
||||||
|
|
||||||
/* Fire off execv in child */
|
/* Fire off execv in child */
|
||||||
|
#ifdef WIN32
|
||||||
|
pid = win32_forkexec(pg_pathname,av);
|
||||||
|
#else
|
||||||
if ((pid = fork()) == 0 && (execv(pg_pathname,av) == -1))
|
if ((pid = fork()) == 0 && (execv(pg_pathname,av) == -1))
|
||||||
/* FIXME: [fork/exec] suggestions for what to do here? Can't call elog... */
|
/* FIXME: [fork/exec] suggestions for what to do here? Can't call elog... */
|
||||||
abort();
|
abort();
|
||||||
|
#endif
|
||||||
return pid; /* Parent returns pid */
|
return pid; /* Parent returns pid */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.357 2004/01/09 23:27:20 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.358 2004/01/11 03:49:31 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
*
|
*
|
||||||
@ -297,6 +297,10 @@ postmaster_error(const char *fmt,...)
|
|||||||
__attribute__((format(printf, 1, 2)));
|
__attribute__((format(printf, 1, 2)));
|
||||||
|
|
||||||
#ifdef EXEC_BACKEND
|
#ifdef EXEC_BACKEND
|
||||||
|
#ifdef WIN32
|
||||||
|
pid_t win32_forkexec(const char* path, char *argv[]);
|
||||||
|
#endif
|
||||||
|
|
||||||
static pid_t Backend_forkexec(Port *port);
|
static pid_t Backend_forkexec(Port *port);
|
||||||
|
|
||||||
static unsigned long tmpBackendFileNum = 0;
|
static unsigned long tmpBackendFileNum = 0;
|
||||||
@ -923,7 +927,12 @@ pmdaemonize(int argc, char *argv[])
|
|||||||
getitimer(ITIMER_PROF, &prof_itimer);
|
getitimer(ITIMER_PROF, &prof_itimer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
/* FIXME: [fork/exec] to be implemented? */
|
||||||
|
abort();
|
||||||
|
#else
|
||||||
pid = fork();
|
pid = fork();
|
||||||
|
#endif
|
||||||
if (pid == (pid_t) -1)
|
if (pid == (pid_t) -1)
|
||||||
{
|
{
|
||||||
postmaster_error("could not fork background process: %s",
|
postmaster_error("could not fork background process: %s",
|
||||||
@ -2692,6 +2701,9 @@ Backend_forkexec(Port *port)
|
|||||||
av[ac++] = NULL;
|
av[ac++] = NULL;
|
||||||
Assert(ac <= lengthof(av));
|
Assert(ac <= lengthof(av));
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
pid = win32_forkexec(pg_pathname,av); /* logs on error */
|
||||||
|
#else
|
||||||
/* Fire off execv in child */
|
/* Fire off execv in child */
|
||||||
if ((pid = fork()) == 0 && (execv(pg_pathname,av) == -1))
|
if ((pid = fork()) == 0 && (execv(pg_pathname,av) == -1))
|
||||||
/*
|
/*
|
||||||
@ -2699,7 +2711,7 @@ Backend_forkexec(Port *port)
|
|||||||
* Probably OK to issue error (unlike pgstat case)
|
* Probably OK to issue error (unlike pgstat case)
|
||||||
*/
|
*/
|
||||||
abort();
|
abort();
|
||||||
|
#endif
|
||||||
return pid; /* Parent returns pid */
|
return pid; /* Parent returns pid */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3039,12 +3051,16 @@ SSDataBase(int xlop)
|
|||||||
|
|
||||||
#ifdef EXEC_BACKEND
|
#ifdef EXEC_BACKEND
|
||||||
/* EXEC_BACKEND case; fork/exec here */
|
/* EXEC_BACKEND case; fork/exec here */
|
||||||
|
#ifdef WIN32
|
||||||
|
pid = win32_forkexec(pg_pathname,av); /* logs on error */
|
||||||
|
#else
|
||||||
if ((pid = fork()) == 0 && (execv(pg_pathname,av) == -1))
|
if ((pid = fork()) == 0 && (execv(pg_pathname,av) == -1))
|
||||||
{
|
{
|
||||||
/* in child */
|
/* in child */
|
||||||
elog(ERROR,"unable to execv in SSDataBase: %m");
|
elog(ERROR,"unable to execv in SSDataBase: %m");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
BootstrapMain(ac, av);
|
BootstrapMain(ac, av);
|
||||||
ExitPostmaster(0);
|
ExitPostmaster(0);
|
||||||
@ -3335,3 +3351,52 @@ read_backend_variables(unsigned long id, Port *port)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
pid_t win32_forkexec(const char* path, char *argv[])
|
||||||
|
{
|
||||||
|
STARTUPINFO si;
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
char *p;
|
||||||
|
int i;
|
||||||
|
char cmdLine[MAXPGPATH];
|
||||||
|
|
||||||
|
/* Format the cmd line */
|
||||||
|
snprintf(cmdLine,sizeof(cmdLine),"%s",path);
|
||||||
|
i = 0;
|
||||||
|
while (argv[++i] != NULL)
|
||||||
|
{
|
||||||
|
/* FIXME: [fork/exec] some strlen checks might be prudent here */
|
||||||
|
strcat(cmdLine," ");
|
||||||
|
strcat(cmdLine,argv[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following snippet can disappear when we consistently
|
||||||
|
* use forward slashes.
|
||||||
|
*/
|
||||||
|
p = cmdLine;
|
||||||
|
while (*(p++) != '\0')
|
||||||
|
if (*p == '/') *p = '\\';
|
||||||
|
|
||||||
|
memset(&pi,0,sizeof(pi));
|
||||||
|
memset(&si,0,sizeof(si));
|
||||||
|
si.cb = sizeof(si);
|
||||||
|
if (!CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi))
|
||||||
|
{
|
||||||
|
elog(ERROR,"CreateProcess call failed (%d): %m",GetLastError());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
FIXME: [fork/exec] we might need to keep the following handle/s,
|
||||||
|
depending on how we implement signalling.
|
||||||
|
*/
|
||||||
|
CloseHandle(pi.hProcess);
|
||||||
|
CloseHandle(pi.hThread);
|
||||||
|
|
||||||
|
return pi.dwProcessId;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.28 2003/12/20 17:31:21 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/storage/freespace/freespace.c,v 1.29 2004/01/11 03:49:31 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTES:
|
* NOTES:
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/storage/ipc/pmsignal.c,v 1.7 2003/12/20 17:31:21 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/storage/ipc/pmsignal.c,v 1.8 2004/01/11 03:49:31 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/storage/ipc/shmem.c,v 1.77 2003/12/30 00:03:03 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/storage/ipc/shmem.c,v 1.78 2004/01/11 03:49:31 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user