Обсуждение: pgsql-server/src/backend/postmaster postmaster.c
pgsql-server/src/backend/postmaster postmaster.c
От
momjian@svr1.postgresql.org (Bruce Momjian)
Дата:
CVSROOT: /cvsroot Module name: pgsql-server Changes by: momjian@svr1.postgresql.org 03/11/10 21:09:42 Modified files: src/backend/postmaster: postmaster.c Log message: * ioctlsocket_ret - is not initialized to 1 (at least in the WIN_32 code I started with!) Claudio Natoli
momjian@svr1.postgresql.org (Bruce Momjian) writes: > * ioctlsocket_ret > - is not initialized to 1 (at least in the WIN_32 code I started > with!) Couldn't we just use a function for FCNTL_NONBLOCK() instead of a macro, and avoid this "ioctlsocket_ret" hackery? -Neil
Neil Conway wrote: > momjian@svr1.postgresql.org (Bruce Momjian) writes: > > * ioctlsocket_ret > > - is not initialized to 1 (at least in the WIN_32 code I started > > with!) > > Couldn't we just use a function for FCNTL_NONBLOCK() instead of a > macro, and avoid this "ioctlsocket_ret" hackery? The problem is that the macro needs a holding variable on Win32 and BeOS: #if !defined(WIN32) && !defined(__BEOS__) #define FCNTL_NONBLOCK(sock) fcntl(sock, F_SETFL, O_NONBLOCK) #else extern long ioctlsocket_ret; /* Returns non-0 on failure, while fcntl() returns -1 on failure */ #ifdef WIN32 #define FCNTL_NONBLOCK(sock) ((ioctlsocket(sock, FIONBIO, &ioctlsocket_ret) == 0) ? 0 : -1) #endif #ifdef __BEOS__ #define FCNTL_NONBLOCK(sock) ((ioctl(sock, FIONBIO, &ioctlsocket_ret) == 0) ? 0 : -1) #endif #endif We define the variable only on Win32/BeOS. Any ideas on how to do this better? -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
Bruce Momjian <pgman@candle.pha.pa.us> writes: > We define the variable only on Win32/BeOS. Any ideas on how to do this > better? int set_non_blocking(some_type socket) { int ret; #ifdef SOME_UNIX_PLATFORM ret = ...; #else #ifdef SOME_WINDOWS_PLATFORM ret = ...; #else ret = ...; #endif return ret; } This function shouldn't be in the critical path for anything, so ISTM that we can hide this platform-specific ugliness inside a function without any harm. -Neil
I have added this to my personal TODO list. Thanks. --------------------------------------------------------------------------- Neil Conway wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > We define the variable only on Win32/BeOS. Any ideas on how to do this > > better? > > int > set_non_blocking(some_type socket) > { > int ret; > > #ifdef SOME_UNIX_PLATFORM > ret = ...; > #else > > #ifdef SOME_WINDOWS_PLATFORM > ret = ...; > #else > ret = ...; > #endif > > return ret; > } > > This function shouldn't be in the critical path for anything, so ISTM > that we can hide this platform-specific ugliness inside a function > without any harm. > > -Neil > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073