From d91acf840136f751898378c0ff41d317e993d1a6 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 5 Mar 2004 01:11:04 +0000 Subject: [PATCH] Win32: * Mostly, casting etc to remove compilation warnings in win32 only code. * main.c: set _IONBF to stdout/stderr under win32 (under win32, _IOLBF defaults to full buffering) * pg_resetxlog/Makefile: ensures dirmod.o gets cleaned (got bitten by this when, after "make clean"ing, switching compilation between Ming + Cygwin) Claudio Natoli --- src/backend/main/main.c | 12 ++++++++++-- src/backend/port/dynloader/win32.h | 5 +++++ src/backend/postmaster/postmaster.c | 28 ++++++++++++++-------------- src/bin/pg_resetxlog/Makefile | 4 ++-- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 685989ecf88..fe368f591ae 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/main/main.c,v 1.74 2004/02/22 21:26:55 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/main/main.c,v 1.75 2004/03/05 01:11:04 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -91,7 +91,14 @@ main(int argc, char *argv[]) #if defined(WIN32) { WSADATA wsaData; - int err = WSAStartup(MAKEWORD(2,2), &wsaData); + int err; + + /* Make output streams unbuffered by default */ + setvbuf(stdout,NULL,_IONBF,0); + setvbuf(stderr,NULL,_IONBF,0); + + /* Prepare Winsock */ + err = WSAStartup(MAKEWORD(2,2), &wsaData); if (err != 0) { fprintf(stderr, "%s: WSAStartup failed: %d\n", @@ -99,6 +106,7 @@ main(int argc, char *argv[]) exit(1); } + /* Start our win32 signal implementation */ pgwin32_signal_initialize(); } #endif diff --git a/src/backend/port/dynloader/win32.h b/src/backend/port/dynloader/win32.h index e08113a79cb..d2d753c10b3 100644 --- a/src/backend/port/dynloader/win32.h +++ b/src/backend/port/dynloader/win32.h @@ -8,4 +8,9 @@ #define pg_dlclose dlclose #define pg_dlerror dlerror +char* dlerror(void); +int dlclose(void *handle); +void* dlsym(void *handle, const char *symbol); +void* dlopen(const char *path, int mode); + #endif /* PORT_PROTOS_H */ diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 42ce48d3c28..3e35bf39399 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.369 2004/02/25 19:41:22 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.370 2004/03/05 01:11:04 momjian Exp $ * * NOTES * @@ -3525,29 +3525,29 @@ pid_t win32_forkexec(const char* path, char *argv[]) si.cb = sizeof(si); if (!CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) { - elog(ERROR,"CreateProcess call failed (%d): %m",GetLastError()); + elog(ERROR,"CreateProcess call failed (%i): %m",(int)GetLastError()); return -1; } if (!IsUnderPostmaster) /* We are the Postmaster creating a child... */ win32_AddChild(pi.dwProcessId,pi.hProcess); - + if (!DuplicateHandle(GetCurrentProcess(), pi.hProcess, GetCurrentProcess(), &childHandleCopy, 0, FALSE, - DUPLICATE_SAME_ACCESS)) + DUPLICATE_SAME_ACCESS)) ereport(FATAL, - (errmsg_internal("failed to duplicate child handle: %i",GetLastError()))); + (errmsg_internal("failed to duplicate child handle: %i",(int)GetLastError()))); waiterThread = CreateThread(NULL, 64*1024, win32_sigchld_waiter, (LPVOID)childHandleCopy, 0, NULL); if (!waiterThread) ereport(FATAL, - (errmsg_internal("failed to create sigchld waiter thread: %i",GetLastError()))); - CloseHandle(waiterThread); - + (errmsg_internal("failed to create sigchld waiter thread: %i",(int)GetLastError()))); + CloseHandle(waiterThread); + if (IsUnderPostmaster) CloseHandle(pi.hProcess); CloseHandle(pi.hThread); @@ -3600,14 +3600,14 @@ static void win32_RemoveChild(pid_t pid) /* Something stronger than WARNING here? */ ereport(WARNING, - (errmsg_internal("unable to find child entry with pid %d", + (errmsg_internal("unable to find child entry with pid %lu", pid))); } static pid_t win32_waitpid(int *exitstatus) { Assert(win32_childPIDArray && win32_childHNDArray); - elog(DEBUG3,"waiting on %d children",win32_numChildren); + elog(DEBUG3,"waiting on %lu children",win32_numChildren); if (win32_numChildren > 0) { @@ -3623,8 +3623,8 @@ static pid_t win32_waitpid(int *exitstatus) { case WAIT_FAILED: ereport(ERROR, - (errmsg_internal("failed to wait on %d children: %i", - win32_numChildren,GetLastError()))); + (errmsg_internal("failed to wait on %lu children: %i", + win32_numChildren,(int)GetLastError()))); /* Fall through to WAIT_TIMEOUTs return */ case WAIT_TIMEOUT: @@ -3641,7 +3641,7 @@ static pid_t win32_waitpid(int *exitstatus) * No choice other than to assume a catastrophic failure. */ ereport(FATAL, - (errmsg_internal("failed to get exit code for child %d", + (errmsg_internal("failed to get exit code for child %lu", win32_childPIDArray[index]))); *exitstatus = (int)exitCode; return win32_childPIDArray[index]; @@ -3661,7 +3661,7 @@ static DWORD WINAPI win32_sigchld_waiter(LPVOID param) { if (r == WAIT_OBJECT_0) pg_queue_signal(SIGCHLD); else - fprintf(stderr,"ERROR: Failed to wait on child process handle: %i\n",GetLastError()); + fprintf(stderr,"ERROR: Failed to wait on child process handle: %i\n",(int)GetLastError()); CloseHandle(procHandle); return 0; } diff --git a/src/bin/pg_resetxlog/Makefile b/src/bin/pg_resetxlog/Makefile index 50f9d770472..a5dc48fdfcd 100644 --- a/src/bin/pg_resetxlog/Makefile +++ b/src/bin/pg_resetxlog/Makefile @@ -4,7 +4,7 @@ # # Copyright (c) 1998-2002, PostgreSQL Global Development Group # -# $PostgreSQL: pgsql/src/bin/pg_resetxlog/Makefile,v 1.5 2004/02/10 23:24:13 tgl Exp $ +# $PostgreSQL: pgsql/src/bin/pg_resetxlog/Makefile,v 1.6 2004/03/05 01:11:04 momjian Exp $ # #------------------------------------------------------------------------- @@ -38,4 +38,4 @@ uninstall: rm -f $(DESTDIR)$(bindir)/pg_resetxlog$(X) clean distclean maintainer-clean: - rm -f pg_resetxlog$(X) pg_resetxlog.o pg_crc.o pg_crc.c dirmod.c + rm -f pg_resetxlog$(X) pg_crc.c dirmod.c $(OBJS) -- 2.39.5