#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <process.h>
#include <signal.h>
#include <errno.h>
#include <direct.h>
#include <sys/utime.h>
Go to the source code of this file.
Data Structures | |
struct | timezone |
struct | itimerval |
Defines | |
#define | _WIN32_WINNT 0x0501 |
#define | ENABLE_SSPI 1 |
#define | _WINSOCKAPI_ |
#define | mkdir(a, b) mkdir(a) |
#define | ftruncate(a, b) chsize(a,b) |
#define | fsync(fd) _commit(fd) |
#define | HAVE_FSYNC_WRITETHROUGH |
#define | FSYNC_WRITETHROUGH_IS_FSYNC |
#define | USES_WINSOCK |
#define | PGDLLIMPORT |
#define | PGDLLEXPORT |
#define | HAVE_UNION_SEMUN 1 |
#define | IPC_RMID 256 |
#define | IPC_CREAT 512 |
#define | IPC_EXCL 1024 |
#define | IPC_PRIVATE 234564 |
#define | IPC_NOWAIT 2048 |
#define | IPC_STAT 4096 |
#define | EACCESS 2048 |
#define | EIDRM 4096 |
#define | SETALL 8192 |
#define | GETNCNT 16384 |
#define | GETVAL 65536 |
#define | SETVAL 131072 |
#define | GETPID 262144 |
#define | WIFEXITED(w) (((w) & 0XFFFFFF00) == 0) |
#define | WIFSIGNALED(w) (!WIFEXITED(w)) |
#define | WEXITSTATUS(w) (w) |
#define | WTERMSIG(w) (w) |
#define | sigmask(sig) ( 1 << ((sig)-1) ) |
#define | SIG_DFL ((pqsigfunc)0) |
#define | SIG_ERR ((pqsigfunc)-1) |
#define | SIG_IGN ((pqsigfunc)1) |
#define | SIGHUP 1 |
#define | SIGQUIT 3 |
#define | SIGTRAP 5 |
#define | SIGABRT 22 |
#define | SIGKILL 9 |
#define | SIGPIPE 13 |
#define | SIGALRM 14 |
#define | SIGSTOP 17 |
#define | SIGTSTP 18 |
#define | SIGCONT 19 |
#define | SIGCHLD 20 |
#define | SIGTTIN 21 |
#define | SIGTTOU 22 |
#define | SIGWINCH 28 |
#define | SIGUSR1 30 |
#define | SIGUSR2 31 |
#define | ITIMER_REAL 0 |
#define | pgoff_t __int64 |
#define | fseeko(stream, offset, origin) fseeko64(stream, offset, origin) |
#define | ftello(stream) ftello64(stream) |
#define | lstat(path, sb) stat((path), (sb)) |
#define | O_DSYNC 0x0080 |
#define | EINTR WSAEINTR |
#define | EAGAIN WSAEWOULDBLOCK |
#define | EMSGSIZE WSAEMSGSIZE |
#define | EAFNOSUPPORT WSAEAFNOSUPPORT |
#define | EWOULDBLOCK WSAEWOULDBLOCK |
#define | ECONNRESET WSAECONNRESET |
#define | EINPROGRESS WSAEINPROGRESS |
#define | ENOBUFS WSAENOBUFS |
#define | EPROTONOSUPPORT WSAEPROTONOSUPPORT |
#define | ECONNREFUSED WSAECONNREFUSED |
#define | EBADFD WSAENOTSOCK |
#define | EOPNOTSUPP WSAEOPNOTSUPP |
#define | locale_t _locale_t |
#define | tolower_l _tolower_l |
#define | toupper_l _toupper_l |
#define | towlower_l _towlower_l |
#define | towupper_l _towupper_l |
#define | isdigit_l _isdigit_l |
#define | iswdigit_l _iswdigit_l |
#define | isalpha_l _isalpha_l |
#define | iswalpha_l _iswalpha_l |
#define | isalnum_l _isalnum_l |
#define | iswalnum_l _iswalnum_l |
#define | isupper_l _isupper_l |
#define | iswupper_l _iswupper_l |
#define | islower_l _islower_l |
#define | iswlower_l _iswlower_l |
#define | isgraph_l _isgraph_l |
#define | iswgraph_l _iswgraph_l |
#define | isprint_l _isprint_l |
#define | iswprint_l _iswprint_l |
#define | ispunct_l _ispunct_l |
#define | iswpunct_l _iswpunct_l |
#define | isspace_l _isspace_l |
#define | iswspace_l _iswspace_l |
#define | strcoll_l _strcoll_l |
#define | wcscoll_l _wcscoll_l |
#define | wcstombs_l _wcstombs_l |
#define | mbstowcs_l _mbstowcs_l |
#define | UNBLOCKED_SIGNAL_QUEUE() (pg_signal_queue & ~pg_signal_mask) |
#define | socket(af, type, protocol) pgwin32_socket(af, type, protocol) |
#define | accept(s, addr, addrlen) pgwin32_accept(s, addr, addrlen) |
#define | connect(s, name, namelen) pgwin32_connect(s, name, namelen) |
#define | select(n, r, w, e, timeout) pgwin32_select(n, r, w, e, timeout) |
#define | recv(s, buf, len, flags) pgwin32_recv(s, buf, len, flags) |
#define | send(s, buf, len, flags) pgwin32_send(s, buf, len, flags) |
#define | putenv(x) pgwin32_putenv(x) |
#define | unsetenv(x) pgwin32_unsetenv(x) |
#define | S_IRGRP 0 |
#define | S_IWGRP 0 |
#define | S_IXGRP 0 |
#define | S_IRWXG 0 |
#define | S_IROTH 0 |
#define | S_IWOTH 0 |
#define | S_IXOTH 0 |
#define | S_IRWXO 0 |
Typedefs | |
typedef int | uid_t |
typedef int | gid_t |
typedef long | key_t |
Functions | |
int | setitimer (int which, const struct itimerval *value, struct itimerval *ovalue) |
void | pgwin32_signal_initialize (void) |
HANDLE | pgwin32_create_signal_listener (pid_t pid) |
void | pgwin32_dispatch_queued_signals (void) |
void | pg_queue_signal (int signum) |
SOCKET | pgwin32_socket (int af, int type, int protocol) |
SOCKET | pgwin32_accept (SOCKET s, struct sockaddr *addr, int *addrlen) |
int | pgwin32_connect (SOCKET s, const struct sockaddr *name, int namelen) |
int | pgwin32_select (int nfds, fd_set *readfs, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout) |
int | pgwin32_recv (SOCKET s, char *buf, int len, int flags) |
int | pgwin32_send (SOCKET s, const void *buf, int len, int flags) |
const char * | pgwin32_socket_strerror (int err) |
int | pgwin32_waitforsinglesocket (SOCKET s, int what, int timeout) |
int | pgwin32_is_admin (void) |
int | pgwin32_is_service (void) |
int | pgwin32_ReserveSharedMemoryRegion (HANDLE) |
void | pgwin32_install_crashdump_handler (void) |
void | _dosmaperr (unsigned long) |
int | pgwin32_putenv (const char *) |
void | pgwin32_unsetenv (const char *) |
Variables | |
PGDLLIMPORT volatile int | pg_signal_queue |
PGDLLIMPORT int | pg_signal_mask |
HANDLE | pgwin32_signal_event |
HANDLE | pgwin32_initial_signal_pipe |
int | pgwin32_noblock |
#define accept | ( | s, | ||
addr, | ||||
addrlen | ||||
) | pgwin32_accept(s, addr, addrlen) |
Definition at line 376 of file win32.h.
Referenced by StreamConnection().
Definition at line 377 of file win32.h.
Referenced by ident_inet(), internal_cancel(), pgstat_init(), and PQconnectPoll().
#define EAGAIN WSAEWOULDBLOCK |
Definition at line 274 of file win32.h.
Referenced by drainSelfPipe(), internal_flush(), PGSemaphoreReset(), PGSemaphoreTryLock(), PgstatCollectorMain(), PostmasterIsAlive(), pq_getbyte_if_available(), pqReadData(), pqsecure_read(), pqsecure_write(), pqSendSome(), and sendSelfPipeByte().
#define ECONNRESET WSAECONNRESET |
Definition at line 285 of file win32.h.
Referenced by errcode_for_socket_access(), pqReadData(), pqsecure_read(), and pqsecure_write().
#define EIDRM 4096 |
Definition at line 109 of file win32.h.
Referenced by InternalIpcMemoryCreate(), InternalIpcSemaphoreCreate(), and PGSharedMemoryIsInUse().
#define EINPROGRESS WSAEINPROGRESS |
Definition at line 288 of file win32.h.
Referenced by PQconnectPoll().
#define EINTR WSAEINTR |
Definition at line 273 of file win32.h.
Referenced by CheckRADIUSAuth(), drainSelfPipe(), FileRead(), FileWrite(), HandleCopyStream(), ident_inet(), internal_cancel(), internal_flush(), libpq_select(), PGSemaphoreLock(), PGSemaphoreReset(), PGSemaphoreTryLock(), PGSemaphoreUnlock(), pgstat_init(), pgstat_send(), PgstatCollectorMain(), pq_getbyte_if_available(), pq_recvbuf(), PQconnectPoll(), pqReadData(), pqsecure_read(), pqsecure_write(), pqSendSome(), pqSocketCheck(), ProcessStartupPacket(), pthread_join(), report_fork_failure_to_client(), select_loop(), sendSelfPipeByte(), ServerLoop(), SysLoggerMain(), system(), threadRun(), try_complete_step(), and WaitLatchOrSocket().
#define EWOULDBLOCK WSAEWOULDBLOCK |
Definition at line 282 of file win32.h.
Referenced by drainSelfPipe(), internal_flush(), PGSemaphoreTryLock(), PgstatCollectorMain(), PostmasterIsAlive(), pq_getbyte_if_available(), PQconnectPoll(), pqReadData(), pqsecure_read(), pqsecure_write(), pqSendSome(), sendSelfPipeByte(), and ServerLoop().
#define fseeko | ( | stream, | ||
offset, | ||||
origin | ||||
) | fseeko64(stream, offset, origin) |
Definition at line 233 of file win32.h.
Referenced by _CloseArchive(), _discoverArchiveFormat(), _PrintTocData(), _ReopenArchive(), _tarAddFile(), checkSeek(), and read_binary_file().
#define fsync | ( | fd | ) | _commit(fd) |
Definition at line 56 of file win32.h.
Referenced by close_walfile(), fsync_fname(), pg_fdatasync(), pg_fsync_no_writethrough(), RewriteControlFile(), test_file_descriptor_sync(), test_open(), test_sync(), WriteEmptyXLOG(), and writeTimeLineHistoryFile().
#define ftello | ( | stream | ) | ftello64(stream) |
Definition at line 236 of file win32.h.
Referenced by _CloseArchive(), _getFilePos(), _ReopenArchive(), _tarAddFile(), _tarGetHeader(), and checkSeek().
#define ftruncate | ( | a, | ||
b | ||||
) | chsize(a,b) |
Definition at line 53 of file win32.h.
Referenced by CheckForExternalTrigger(), FileTruncate(), and mdunlinkfork().
#define GETPID 262144 |
Definition at line 116 of file win32.h.
Referenced by IpcSemaphoreGetLastPID().
#define GETVAL 65536 |
Definition at line 114 of file win32.h.
Referenced by IpcSemaphoreGetValue().
#define IPC_CREAT 512 |
Definition at line 101 of file win32.h.
Referenced by InternalIpcMemoryCreate(), and InternalIpcSemaphoreCreate().
#define IPC_EXCL 1024 |
Definition at line 102 of file win32.h.
Referenced by InternalIpcMemoryCreate(), and InternalIpcSemaphoreCreate().
#define IPC_RMID 256 |
Definition at line 100 of file win32.h.
Referenced by InternalIpcMemoryCreate(), IpcMemoryDelete(), IpcSemaphoreCreate(), IpcSemaphoreKill(), and PGSharedMemoryCreate().
#define IPC_STAT 4096 |
Definition at line 105 of file win32.h.
Referenced by PGSharedMemoryIsInUse().
#define isalnum_l _isalnum_l |
Definition at line 339 of file win32.h.
Referenced by pg_wc_isalnum(), and str_initcap().
#define isalpha_l _isalpha_l |
Definition at line 337 of file win32.h.
Referenced by pattern_char_isalpha(), and pg_wc_isalpha().
#define isdigit_l _isdigit_l |
Definition at line 335 of file win32.h.
Referenced by pg_wc_isdigit().
#define isgraph_l _isgraph_l |
Definition at line 345 of file win32.h.
Referenced by pg_wc_isgraph().
#define islower_l _islower_l |
Definition at line 343 of file win32.h.
Referenced by pg_wc_islower().
#define isprint_l _isprint_l |
Definition at line 347 of file win32.h.
Referenced by pg_wc_isprint().
#define ispunct_l _ispunct_l |
Definition at line 349 of file win32.h.
Referenced by pg_wc_ispunct().
#define isspace_l _isspace_l |
Definition at line 351 of file win32.h.
Referenced by pg_wc_isspace().
#define isupper_l _isupper_l |
Definition at line 341 of file win32.h.
Referenced by pg_wc_isupper().
#define iswalnum_l _iswalnum_l |
Definition at line 340 of file win32.h.
Referenced by pg_wc_isalnum(), and str_initcap().
#define iswalpha_l _iswalpha_l |
Definition at line 338 of file win32.h.
Referenced by pg_wc_isalpha().
#define iswdigit_l _iswdigit_l |
Definition at line 336 of file win32.h.
Referenced by pg_wc_isdigit().
#define iswgraph_l _iswgraph_l |
Definition at line 346 of file win32.h.
Referenced by pg_wc_isgraph().
#define iswlower_l _iswlower_l |
Definition at line 344 of file win32.h.
Referenced by pg_wc_islower().
#define iswprint_l _iswprint_l |
Definition at line 348 of file win32.h.
Referenced by pg_wc_isprint().
#define iswpunct_l _iswpunct_l |
Definition at line 350 of file win32.h.
Referenced by pg_wc_ispunct().
#define iswspace_l _iswspace_l |
Definition at line 352 of file win32.h.
Referenced by pg_wc_isspace().
#define iswupper_l _iswupper_l |
Definition at line 342 of file win32.h.
Referenced by pg_wc_isupper().
#define ITIMER_REAL 0 |
Definition at line 214 of file win32.h.
Referenced by disable_all_timeouts(), schedule_alarm(), and setitimer().
#define locale_t _locale_t |
Definition at line 330 of file win32.h.
Referenced by pg_newlocale_from_collation().
#define lstat | ( | path, | ||
sb | ||||
) | stat((path), (sb)) |
Definition at line 258 of file win32.h.
Referenced by check_db_file_conflict(), copydir(), destroy_tablespace_directories(), perform_base_backup(), remove_dbtablespaces(), RemoveOldXlogFiles(), resolve_symlinks(), rmtree(), sendDir(), sendTablespace(), and walkdir().
#define mkdir | ( | a, | ||
b | ||||
) | mkdir(a) |
Definition at line 51 of file win32.h.
Referenced by copydir(), create_tablespace_directories(), InitArchiveFmt_Directory(), make_directory(), mkdirs(), OpenTemporaryFileInTablespace(), pg_mkdir_p(), proc_exit(), ReceiveAndUnpackTarFile(), SysLogger_Start(), SysLoggerMain(), TablespaceCreateDbspace(), and ValidateXLOGDirectoryStructure().
#define O_DSYNC 0x0080 |
Definition at line 266 of file win32.h.
Referenced by test_sync().
#define pgoff_t __int64 |
Definition at line 227 of file win32.h.
Referenced by _CloseArchive(), _getFilePos(), _ReopenArchive(), _tarAddFile(), _tarGetHeader(), checkSeek(), perform_base_backup(), ReadOffset(), and sendFile().
#define putenv | ( | x | ) | pgwin32_putenv(x) |
Definition at line 412 of file win32.h.
Referenced by add_to_path(), bootstrap_template1(), do_start(), doputenv(), exec_command(), get_restricted_token(), initialize_environment(), main(), pg_perm_setlocale(), pg_putenv(), set_pglocale_pgservice(), setup_pgdata(), and unsetenv().
Definition at line 379 of file win32.h.
Referenced by ident_inet(), internal_cancel(), pgstat_init(), PgstatCollectorMain(), pqsecure_read(), and secure_read().
#define S_IRGRP 0 |
Definition at line 466 of file win32.h.
Referenced by lo_export(), and PostmasterMain().
#define S_IROTH 0 |
Definition at line 470 of file win32.h.
Referenced by lo_export(), and PostmasterMain().
#define S_IRWXG 0 |
Definition at line 469 of file win32.h.
Referenced by checkDataDir(), exec_prog(), fopen_priv(), initialize_data_directory(), logfile_open(), main(), make_directory(), PasswordFromFile(), pg_mkdir_p(), PostmasterMain(), and proc_exit().
#define S_IRWXO 0 |
Definition at line 473 of file win32.h.
Referenced by checkDataDir(), exec_prog(), fopen_priv(), initialize_data_directory(), logfile_open(), main(), make_directory(), PasswordFromFile(), pg_mkdir_p(), PostmasterMain(), and proc_exit().
#define S_IWGRP 0 |
Definition at line 467 of file win32.h.
Referenced by BeginCopyTo(), lo_export(), and main().
#define S_IWOTH 0 |
Definition at line 471 of file win32.h.
Referenced by BeginCopyTo(), lo_export(), and main().
Definition at line 378 of file win32.h.
Referenced by CheckRADIUSAuth(), getMessageFromWorker(), HandleCopyStream(), libpq_select(), main(), pg_usleep(), pgstat_init(), pqSocketPoll(), reached_end_position(), select_loop(), ServerLoop(), threadRun(), try_complete_step(), and WaitLatchOrSocket().
Definition at line 380 of file win32.h.
Referenced by ident_inet(), internal_cancel(), pgstat_init(), pgstat_send(), pqsecure_write(), ProcessStartupPacket(), report_fork_failure_to_client(), and secure_write().
#define SETVAL 131072 |
Definition at line 115 of file win32.h.
Referenced by IpcSemaphoreInitialize().
#define SIG_DFL ((pqsigfunc)0) |
Definition at line 177 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), ClosePager(), do_copy(), do_start_bgworker(), halt(), PgArchiverMain(), PgstatCollectorMain(), pgwin32_dispatch_queued_signals(), PostgresMain(), setQFout(), sigquit_handler(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIG_ERR ((pqsigfunc)-1) |
Definition at line 178 of file win32.h.
Referenced by pgwin32_dispatch_queued_signals().
#define SIG_IGN ((pqsigfunc)1) |
Definition at line 179 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), do_copy(), do_start_bgworker(), halt(), PageOutput(), PgArchiverMain(), PgstatCollectorMain(), pgwin32_dispatch_queued_signals(), PostgresMain(), PostmasterMain(), PQprint(), setQFout(), setup_signals(), ShutdownWorkersHard(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGABRT 22 |
Definition at line 185 of file win32.h.
Referenced by pqinitmask().
#define SIGALRM 14 |
Definition at line 188 of file win32.h.
Referenced by BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), InitializeTimeouts(), main(), pg_timer_thread(), PgArchiverMain(), PgstatCollectorMain(), PostmasterMain(), pqinitmask(), pqsignal(), setalarm(), SysLoggerMain(), WalReceiverMain(), and WalWriterMain().
#define SIGCHLD 20 |
Definition at line 192 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), do_start_bgworker(), PgArchiverMain(), PgstatCollectorMain(), PostgresMain(), PostmasterMain(), pqinitmask(), pqsignal(), StartupProcessMain(), SysLoggerMain(), system(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGCONT 19 |
Definition at line 191 of file win32.h.
Referenced by BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), PgArchiverMain(), PgstatCollectorMain(), pqinitmask(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGHUP 1 |
Definition at line 182 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), do_start_bgworker(), halt(), main(), pg_reload_conf(), PgArchiverMain(), PgstatCollectorMain(), PostgresMain(), PostmasterMain(), pqinitmask(), setup_signals(), SIGHUP_handler(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGKILL 9 |
Definition at line 186 of file win32.h.
Referenced by regression_main().
Definition at line 171 of file win32.h.
Referenced by pg_queue_signal(), pgwin32_dispatch_queued_signals(), and pqinitmask().
#define SIGPIPE 13 |
Definition at line 187 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), ClosePager(), do_copy(), do_start_bgworker(), PageOutput(), PgArchiverMain(), PgstatCollectorMain(), PostgresMain(), PostmasterMain(), PQprint(), setQFout(), setup_signals(), ShutdownWorkersHard(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGQUIT 3 |
Definition at line 183 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackendInitialize(), BackgroundWriterMain(), bgworker_quickdie(), bootstrap_signals(), CheckpointerMain(), do_start_bgworker(), halt(), HandleChildCrash(), main(), ParallelBackupStart(), PgArchiverMain(), PgstatCollectorMain(), pmdie(), PostgresMain(), PostmasterMain(), PostmasterStateMachine(), pqinitmask(), quickdie(), reaper(), setup_signals(), signal_child(), StartupProcessMain(), SysLoggerMain(), system(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGSTOP 17 |
Definition at line 189 of file win32.h.
Referenced by HandleChildCrash(), and signal_child().
#define SIGTRAP 5 |
Definition at line 184 of file win32.h.
Referenced by pqinitmask().
#define SIGTTIN 21 |
Definition at line 193 of file win32.h.
Referenced by BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), PgArchiverMain(), PgstatCollectorMain(), PostmasterMain(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGTTOU 22 |
Definition at line 194 of file win32.h.
Referenced by BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), PgArchiverMain(), PgstatCollectorMain(), PostmasterMain(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGUSR1 30 |
Definition at line 197 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), do_start_bgworker(), main(), PgArchiverMain(), PgstatCollectorMain(), PostgresMain(), PostmasterMain(), pqinitmask(), SendPostmasterSignal(), SendProcSignal(), SetLatch(), sigusr1_handler(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGUSR2 31 |
Definition at line 198 of file win32.h.
Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), do_start_bgworker(), PgArchiverMain(), PgstatCollectorMain(), PostgresMain(), PostmasterMain(), PostmasterStateMachine(), pqinitmask(), ProcKill(), reaper(), ServerLoop(), sigusr1_handler(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define SIGWINCH 28 |
Definition at line 195 of file win32.h.
Referenced by BackgroundWriterMain(), bootstrap_signals(), CheckpointerMain(), PgArchiverMain(), PgstatCollectorMain(), pqinitmask(), StartupProcessMain(), SysLoggerMain(), WalReceiverMain(), WalSndSignals(), and WalWriterMain().
#define socket | ( | af, | ||
type, | ||||
protocol | ||||
) | pgwin32_socket(af, type, protocol) |
Definition at line 375 of file win32.h.
Referenced by CheckRADIUSAuth(), ident_inet(), internal_cancel(), pgstat_init(), PQconnectPoll(), and StreamServerPort().
#define strcoll_l _strcoll_l |
Definition at line 353 of file win32.h.
Referenced by varstr_cmp().
#define tolower_l _tolower_l |
Definition at line 331 of file win32.h.
Referenced by pg_wc_tolower(), SB_lower_char(), str_initcap(), and str_tolower().
#define toupper_l _toupper_l |
Definition at line 332 of file win32.h.
Referenced by pg_wc_toupper(), str_initcap(), and str_toupper().
#define towlower_l _towlower_l |
Definition at line 333 of file win32.h.
Referenced by pg_wc_tolower(), str_initcap(), and str_tolower().
#define towupper_l _towupper_l |
Definition at line 334 of file win32.h.
Referenced by pg_wc_toupper(), str_initcap(), and str_toupper().
#define UNBLOCKED_SIGNAL_QUEUE | ( | ) | (pg_signal_queue & ~pg_signal_mask) |
Definition at line 365 of file win32.h.
Referenced by pgwin32_dispatch_queued_signals(), and pgwin32_poll_signals().
#define unsetenv | ( | x | ) | pgwin32_unsetenv(x) |
Definition at line 413 of file win32.h.
Referenced by bootstrap_template1(), exec_command(), initialize_environment(), main(), and pg_putenv().
#define wcscoll_l _wcscoll_l |
Definition at line 354 of file win32.h.
Referenced by varstr_cmp().
#define WEXITSTATUS | ( | w | ) | (w) |
Definition at line 168 of file win32.h.
Referenced by BaseBackup(), ExecuteRecoveryCommand(), log_child_failure(), LogChildExit(), pgarch_archiveXlog(), reap_child(), RestoreArchivedFile(), run_diff(), wait_result_to_str(), and yearistype().
#define WIFEXITED | ( | w | ) | (((w) & 0XFFFFFF00) == 0) |
Definition at line 166 of file win32.h.
Referenced by BaseBackup(), log_child_failure(), LogChildExit(), pgarch_archiveXlog(), reap_child(), run_diff(), wait_result_to_str(), and yearistype().
#define WIFSIGNALED | ( | w | ) | (!WIFEXITED(w)) |
Definition at line 167 of file win32.h.
Referenced by ExecuteRecoveryCommand(), log_child_failure(), LogChildExit(), pgarch_archiveXlog(), RestoreArchivedFile(), and wait_result_to_str().
#define WTERMSIG | ( | w | ) | (w) |
Definition at line 169 of file win32.h.
Referenced by log_child_failure(), LogChildExit(), pgarch_archiveXlog(), RestoreArchivedFile(), and wait_result_to_str().
void _dosmaperr | ( | unsigned | long | ) |
Definition at line 168 of file win32error.c.
References _, DEBUG5, doserrors, ereport, errmsg_internal(), i, lengthof, LOG, and winerr.
Referenced by BaseBackup(), FileRead(), FileWrite(), getErrorText(), getrusage(), and readdir().
{ int i; if (e == 0) { errno = 0; return; } for (i = 0; i < lengthof(doserrors); i++) { if (doserrors[i].winerr == e) { errno = doserrors[i].doserr; #ifndef FRONTEND ereport(DEBUG5, (errmsg_internal("mapped win32 error code %lu to %d", e, errno))); #elif FRONTEND_DEBUG fprintf(stderr, _("mapped win32 error code %lu to %d"), e, errno); #endif return; } } #ifndef FRONTEND ereport(LOG, (errmsg_internal("unrecognized win32 error code: %lu", e))); #else fprintf(stderr, _("unrecognized win32 error code: %lu"), e); #endif errno = EINVAL; return; }
void pg_queue_signal | ( | int | signum | ) |
Definition at line 209 of file signal.c.
References pg_signal_crit_sec, pg_signal_queue, pgwin32_signal_event, and sigmask.
Referenced by pg_console_handler(), pg_signal_dispatch_thread(), and pg_timer_thread().
{ if (signum >= PG_SIGNAL_COUNT || signum <= 0) return; EnterCriticalSection(&pg_signal_crit_sec); pg_signal_queue |= sigmask(signum); LeaveCriticalSection(&pg_signal_crit_sec); SetEvent(pgwin32_signal_event); }
SOCKET pgwin32_accept | ( | SOCKET | s, | |
struct sockaddr * | addr, | |||
int * | addrlen | |||
) |
Definition at line 266 of file socket.c.
References NULL, pgwin32_poll_signals(), and TranslateSocketError().
{ SOCKET rs; /* * Poll for signals, but don't return with EINTR, since we don't handle * that in pqcomm.c */ pgwin32_poll_signals(); rs = WSAAccept(s, addr, addrlen, NULL, 0); if (rs == INVALID_SOCKET) { TranslateSocketError(); return INVALID_SOCKET; } return rs; }
int pgwin32_connect | ( | SOCKET | s, | |
const struct sockaddr * | name, | |||
int | namelen | |||
) |
Definition at line 288 of file socket.c.
References NULL, pgwin32_waitforsinglesocket(), and TranslateSocketError().
{ int r; r = WSAConnect(s, addr, addrlen, NULL, NULL, NULL, NULL); if (r == 0) return 0; if (WSAGetLastError() != WSAEWOULDBLOCK) { TranslateSocketError(); return -1; } while (pgwin32_waitforsinglesocket(s, FD_CONNECT, INFINITE) == 0) { /* Loop endlessly as long as we are just delivering signals */ } return 0; }
HANDLE pgwin32_create_signal_listener | ( | pid_t | pid | ) |
Definition at line 180 of file signal.c.
References ereport, errmsg(), ERROR, NULL, and snprintf().
{ char pipename[128]; HANDLE pipe; snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", (int) pid); pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 16, 16, 1000, NULL); if (pipe == INVALID_HANDLE_VALUE) ereport(ERROR, (errmsg("could not create signal listener pipe for PID %d: error code %lu", (int) pid, GetLastError()))); return pipe; }
void pgwin32_dispatch_queued_signals | ( | void | ) |
Definition at line 106 of file signal.c.
References i, pg_signal_array, pg_signal_crit_sec, pg_signal_defaults, pg_signal_queue, pgwin32_signal_event, sig, SIG_DFL, SIG_ERR, SIG_IGN, sigmask, and UNBLOCKED_SIGNAL_QUEUE.
Referenced by pg_usleep(), PGSemaphoreLock(), pgwin32_poll_signals(), pgwin32_select(), pgwin32_waitforsinglesocket(), pqsigsetmask(), and WaitLatchOrSocket().
{ int i; EnterCriticalSection(&pg_signal_crit_sec); while (UNBLOCKED_SIGNAL_QUEUE()) { /* One or more unblocked signals queued for execution */ int exec_mask = UNBLOCKED_SIGNAL_QUEUE(); for (i = 0; i < PG_SIGNAL_COUNT; i++) { if (exec_mask & sigmask(i)) { /* Execute this signal */ pqsigfunc sig = pg_signal_array[i]; if (sig == SIG_DFL) sig = pg_signal_defaults[i]; pg_signal_queue &= ~sigmask(i); if (sig != SIG_ERR && sig != SIG_IGN && sig != SIG_DFL) { LeaveCriticalSection(&pg_signal_crit_sec); sig(i); EnterCriticalSection(&pg_signal_crit_sec); break; /* Restart outer loop, in case signal mask or * queue has been modified inside signal * handler */ } } } } ResetEvent(pgwin32_signal_event); LeaveCriticalSection(&pg_signal_crit_sec); }
void pgwin32_install_crashdump_handler | ( | void | ) |
Definition at line 167 of file crashdump.c.
References crashDumpHandler().
Referenced by main().
{ SetUnhandledExceptionFilter(crashDumpHandler); }
int pgwin32_is_admin | ( | void | ) |
Definition at line 29 of file security.c.
References BOOL(), free, pgwin32_get_dynamic_tokeninfo(), and write_stderr.
Referenced by check_root().
{ HANDLE AccessToken; char *InfoBuffer = NULL; char errbuf[256]; PTOKEN_GROUPS Groups; PSID AdministratorsSid; PSID PowerUsersSid; SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY}; UINT x; BOOL success; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &AccessToken)) { write_stderr("could not open process token: error code %lu\n", GetLastError()); exit(1); } if (!pgwin32_get_dynamic_tokeninfo(AccessToken, TokenGroups, &InfoBuffer, errbuf, sizeof(errbuf))) { write_stderr("%s", errbuf); exit(1); } Groups = (PTOKEN_GROUPS) InfoBuffer; CloseHandle(AccessToken); if (!AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsSid)) { write_stderr("could not get SID for Administrators group: error code %lu\n", GetLastError()); exit(1); } if (!AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_POWER_USERS, 0, 0, 0, 0, 0, 0, &PowerUsersSid)) { write_stderr("could not get SID for PowerUsers group: error code %lu\n", GetLastError()); exit(1); } success = FALSE; for (x = 0; x < Groups->GroupCount; x++) { if ((EqualSid(AdministratorsSid, Groups->Groups[x].Sid) && (Groups->Groups[x].Attributes & SE_GROUP_ENABLED)) || (EqualSid(PowerUsersSid, Groups->Groups[x].Sid) && (Groups->Groups[x].Attributes & SE_GROUP_ENABLED))) { success = TRUE; break; } } free(InfoBuffer); FreeSid(AdministratorsSid); FreeSid(PowerUsersSid); return success; }
int pgwin32_is_service | ( | void | ) |
Definition at line 113 of file security.c.
References free, and pgwin32_get_dynamic_tokeninfo().
Referenced by send_message_to_server_log(), and write_stderr().
{ static int _is_service = -1; HANDLE AccessToken; char *InfoBuffer = NULL; char errbuf[256]; PTOKEN_GROUPS Groups; PTOKEN_USER User; PSID ServiceSid; PSID LocalSystemSid; SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY}; UINT x; /* Only check the first time */ if (_is_service != -1) return _is_service; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &AccessToken)) { fprintf(stderr, "could not open process token: error code %lu\n", GetLastError()); return -1; } /* First check for local system */ if (!pgwin32_get_dynamic_tokeninfo(AccessToken, TokenUser, &InfoBuffer, errbuf, sizeof(errbuf))) { fprintf(stderr, "%s", errbuf); return -1; } User = (PTOKEN_USER) InfoBuffer; if (!AllocateAndInitializeSid(&NtAuthority, 1, SECURITY_LOCAL_SYSTEM_RID, 0, 0, 0, 0, 0, 0, 0, &LocalSystemSid)) { fprintf(stderr, "could not get SID for local system account\n"); CloseHandle(AccessToken); return -1; } if (EqualSid(LocalSystemSid, User->User.Sid)) { FreeSid(LocalSystemSid); free(InfoBuffer); CloseHandle(AccessToken); _is_service = 1; return _is_service; } FreeSid(LocalSystemSid); free(InfoBuffer); /* Now check for group SID */ if (!pgwin32_get_dynamic_tokeninfo(AccessToken, TokenGroups, &InfoBuffer, errbuf, sizeof(errbuf))) { fprintf(stderr, "%s", errbuf); return -1; } Groups = (PTOKEN_GROUPS) InfoBuffer; if (!AllocateAndInitializeSid(&NtAuthority, 1, SECURITY_SERVICE_RID, 0, 0, 0, 0, 0, 0, 0, &ServiceSid)) { fprintf(stderr, "could not get SID for service group\n"); free(InfoBuffer); CloseHandle(AccessToken); return -1; } _is_service = 0; for (x = 0; x < Groups->GroupCount; x++) { if (EqualSid(ServiceSid, Groups->Groups[x].Sid)) { _is_service = 1; break; } } free(InfoBuffer); FreeSid(ServiceSid); CloseHandle(AccessToken); return _is_service; }
int pgwin32_putenv | ( | const char * | ) |
Definition at line 21 of file win32env.c.
References free, i, modulename, and NULL.
Referenced by pgwin32_unsetenv().
{ char *envcpy; char *cp; /* * Each version of MSVCRT has its own _putenv() call in the runtime * library. * * mingw always uses MSVCRT.DLL, but if we are in a Visual C++ * environment, attempt to update the environment in all MSVCRT modules * that are currently loaded, to work properly with any third party * libraries linked against a different MSVCRT but still relying on * environment variables. * * Also separately update the system environment that gets inherited by * subprocesses. */ #ifdef _MSC_VER typedef int (_cdecl * PUTENVPROC) (const char *); static struct { char *modulename; HMODULE hmodule; PUTENVPROC putenvFunc; } rtmodules[] = { { "msvcrt", 0, NULL }, /* Visual Studio 6.0 / mingw */ { "msvcr70", 0, NULL }, /* Visual Studio 2002 */ { "msvcr71", 0, NULL }, /* Visual Studio 2003 */ { "msvcr80", 0, NULL }, /* Visual Studio 2005 */ { "msvcr90", 0, NULL }, /* Visual Studio 2008 */ { "msvcr100", 0, NULL }, /* Visual Studio 2010 */ { "msvcr110", 0, NULL }, /* Visual Studio 2012 */ { NULL, 0, NULL } }; int i; for (i = 0; rtmodules[i].modulename; i++) { if (rtmodules[i].putenvFunc == NULL) { if (rtmodules[i].hmodule == 0) { /* Not attempted before, so try to find this DLL */ rtmodules[i].hmodule = GetModuleHandle(rtmodules[i].modulename); if (rtmodules[i].hmodule == NULL) { /* * Set to INVALID_HANDLE_VALUE so we know we have tried * this one before, and won't try again. */ rtmodules[i].hmodule = INVALID_HANDLE_VALUE; continue; } else { rtmodules[i].putenvFunc = (PUTENVPROC) GetProcAddress(rtmodules[i].hmodule, "_putenv"); if (rtmodules[i].putenvFunc == NULL) { CloseHandle(rtmodules[i].hmodule); rtmodules[i].hmodule = INVALID_HANDLE_VALUE; continue; } } } else { /* * Module loaded, but we did not find the function last time. * We're not going to find it this time either... */ continue; } } /* At this point, putenvFunc is set or we have exited the loop */ rtmodules[i].putenvFunc(envval); } #endif /* _MSC_VER */ /* * Update the process environment - to make modifications visible to child * processes. * * Need a copy of the string so we can modify it. */ envcpy = strdup(envval); if (!envcpy) return -1; cp = strchr(envcpy, '='); if (cp == NULL) { free(envcpy); return -1; } *cp = '\0'; cp++; if (strlen(cp)) { /* * Only call SetEnvironmentVariable() when we are adding a variable, * not when removing it. Calling it on both crashes on at least * certain versions of MingW. */ if (!SetEnvironmentVariable(envcpy, cp)) { free(envcpy); return -1; } } free(envcpy); /* Finally, update our "own" cache */ return _putenv(envval); }
int pgwin32_recv | ( | SOCKET | s, | |
char * | buf, | |||
int | len, | |||
int | flags | |||
) |
Definition at line 311 of file socket.c.
References ereport, errmsg_internal(), NOTICE, NULL, pg_usleep(), pgwin32_noblock, pgwin32_poll_signals(), pgwin32_waitforsinglesocket(), and TranslateSocketError().
{ WSABUF wbuf; int r; DWORD b; DWORD flags = f; int n; if (pgwin32_poll_signals()) return -1; wbuf.len = len; wbuf.buf = buf; r = WSARecv(s, &wbuf, 1, &b, &flags, NULL, NULL); if (r != SOCKET_ERROR && b > 0) /* Read succeeded right away */ return b; if (r == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) { TranslateSocketError(); return -1; } if (pgwin32_noblock) { /* * No data received, and we are in "emulated non-blocking mode", so * return indicating that we'd block if we were to continue. */ errno = EWOULDBLOCK; return -1; } /* No error, zero bytes (win2000+) or error+WSAEWOULDBLOCK (<=nt4) */ for (n = 0; n < 5; n++) { if (pgwin32_waitforsinglesocket(s, FD_READ | FD_CLOSE | FD_ACCEPT, INFINITE) == 0) return -1; /* errno already set */ r = WSARecv(s, &wbuf, 1, &b, &flags, NULL, NULL); if (r == SOCKET_ERROR) { if (WSAGetLastError() == WSAEWOULDBLOCK) { /* * There seem to be cases on win2k (at least) where WSARecv * can return WSAEWOULDBLOCK even when * pgwin32_waitforsinglesocket claims the socket is readable. * In this case, just sleep for a moment and try again. We try * up to 5 times - if it fails more than that it's not likely * to ever come back. */ pg_usleep(10000); continue; } TranslateSocketError(); return -1; } return b; } ereport(NOTICE, (errmsg_internal("could not read from ready socket (after retries)"))); errno = EWOULDBLOCK; return -1; }
int pgwin32_ReserveSharedMemoryRegion | ( | HANDLE | ) |
Definition at line 342 of file win32_shmem.c.
References Assert, elog, LOG, NULL, UsedShmemSegAddr, and UsedShmemSegSize.
{ void *address; Assert(UsedShmemSegAddr != NULL); Assert(UsedShmemSegSize != 0); address = VirtualAllocEx(hChild, UsedShmemSegAddr, UsedShmemSegSize, MEM_RESERVE, PAGE_READWRITE); if (address == NULL) { /* Don't use FATAL since we're running in the postmaster */ elog(LOG, "could not reserve shared memory region (addr=%p) for child %p: error code %lu", UsedShmemSegAddr, hChild, GetLastError()); return false; } if (address != UsedShmemSegAddr) { /* * Should never happen - in theory if allocation granularity causes * strange effects it could, so check just in case. * * Don't use FATAL since we're running in the postmaster. */ elog(LOG, "reserved shared memory region got incorrect address %p, expected %p", address, UsedShmemSegAddr); VirtualFreeEx(hChild, address, 0, MEM_RELEASE); return false; } return true; }
int pgwin32_select | ( | int | nfds, | |
fd_set * | readfs, | |||
fd_set * | writefds, | |||
fd_set * | exceptfds, | |||
const struct timeval * | timeout | |||
) |
Definition at line 451 of file socket.c.
References Assert, buf, elog, ERROR, FALSE, i, NULL, pgwin32_dispatch_queued_signals(), pgwin32_poll_signals(), pgwin32_signal_event, TranslateSocketError(), and TRUE.
{ WSAEVENT events[FD_SETSIZE * 2]; /* worst case is readfds totally * different from writefds, so * 2*FD_SETSIZE sockets */ SOCKET sockets[FD_SETSIZE * 2]; int numevents = 0; int i; int r; DWORD timeoutval = WSA_INFINITE; FD_SET outreadfds; FD_SET outwritefds; int nummatches = 0; Assert(exceptfds == NULL); if (pgwin32_poll_signals()) return -1; FD_ZERO(&outreadfds); FD_ZERO(&outwritefds); /* * Write FDs are different in the way that it is only flagged by * WSASelectEvent() if we have tried to write to them first. So try an * empty write */ if (writefds) { for (i = 0; i < writefds->fd_count; i++) { char c; WSABUF buf; DWORD sent; buf.buf = &c; buf.len = 0; r = WSASend(writefds->fd_array[i], &buf, 1, &sent, 0, NULL, NULL); if (r == 0) /* Completed - means things are fine! */ FD_SET(writefds->fd_array[i], &outwritefds); else { /* Not completed */ if (WSAGetLastError() != WSAEWOULDBLOCK) /* * Not completed, and not just "would block", so an error * occurred */ FD_SET(writefds->fd_array[i], &outwritefds); } } if (outwritefds.fd_count > 0) { memcpy(writefds, &outwritefds, sizeof(fd_set)); if (readfds) FD_ZERO(readfds); return outwritefds.fd_count; } } /* Now set up for an actual select */ if (timeout != NULL) { /* timeoutval is in milliseconds */ timeoutval = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; } if (readfds != NULL) { for (i = 0; i < readfds->fd_count; i++) { events[numevents] = WSACreateEvent(); sockets[numevents] = readfds->fd_array[i]; numevents++; } } if (writefds != NULL) { for (i = 0; i < writefds->fd_count; i++) { if (!readfds || !FD_ISSET(writefds->fd_array[i], readfds)) { /* If the socket is not in the read list */ events[numevents] = WSACreateEvent(); sockets[numevents] = writefds->fd_array[i]; numevents++; } } } for (i = 0; i < numevents; i++) { int flags = 0; if (readfds && FD_ISSET(sockets[i], readfds)) flags |= FD_READ | FD_ACCEPT | FD_CLOSE; if (writefds && FD_ISSET(sockets[i], writefds)) flags |= FD_WRITE | FD_CLOSE; if (WSAEventSelect(sockets[i], events[i], flags) != 0) { TranslateSocketError(); /* release already-assigned event objects */ while (--i >= 0) WSAEventSelect(sockets[i], NULL, 0); for (i = 0; i < numevents; i++) WSACloseEvent(events[i]); return -1; } } events[numevents] = pgwin32_signal_event; r = WaitForMultipleObjectsEx(numevents + 1, events, FALSE, timeoutval, TRUE); if (r != WAIT_TIMEOUT && r != WAIT_IO_COMPLETION && r != (WAIT_OBJECT_0 + numevents)) { /* * We scan all events, even those not signalled, in case more than one * event has been tagged but Wait.. can only return one. */ WSANETWORKEVENTS resEvents; for (i = 0; i < numevents; i++) { ZeroMemory(&resEvents, sizeof(resEvents)); if (WSAEnumNetworkEvents(sockets[i], events[i], &resEvents) != 0) elog(ERROR, "failed to enumerate network events: error code %u", WSAGetLastError()); /* Read activity? */ if (readfds && FD_ISSET(sockets[i], readfds)) { if ((resEvents.lNetworkEvents & FD_READ) || (resEvents.lNetworkEvents & FD_ACCEPT) || (resEvents.lNetworkEvents & FD_CLOSE)) { FD_SET(sockets[i], &outreadfds); nummatches++; } } /* Write activity? */ if (writefds && FD_ISSET(sockets[i], writefds)) { if ((resEvents.lNetworkEvents & FD_WRITE) || (resEvents.lNetworkEvents & FD_CLOSE)) { FD_SET(sockets[i], &outwritefds); nummatches++; } } } } /* Clean up all the event objects */ for (i = 0; i < numevents; i++) { WSAEventSelect(sockets[i], NULL, 0); WSACloseEvent(events[i]); } if (r == WSA_WAIT_TIMEOUT) { if (readfds) FD_ZERO(readfds); if (writefds) FD_ZERO(writefds); return 0; } if (r == WAIT_OBJECT_0 + numevents) { pgwin32_dispatch_queued_signals(); errno = EINTR; if (readfds) FD_ZERO(readfds); if (writefds) FD_ZERO(writefds); return -1; } /* Overwrite socket sets with our resulting values */ if (readfds) memcpy(readfds, &outreadfds, sizeof(fd_set)); if (writefds) memcpy(writefds, &outwritefds, sizeof(fd_set)); return nummatches; }
int pgwin32_send | ( | SOCKET | s, | |
const void * | buf, | |||
int | len, | |||
int | flags | |||
) |
Definition at line 393 of file socket.c.
References NULL, pgwin32_noblock, pgwin32_poll_signals(), pgwin32_waitforsinglesocket(), and TranslateSocketError().
{ WSABUF wbuf; int r; DWORD b; if (pgwin32_poll_signals()) return -1; wbuf.len = len; wbuf.buf = (char *) buf; /* * Readiness of socket to send data to UDP socket may be not true: socket * can become busy again! So loop until send or error occurs. */ for (;;) { r = WSASend(s, &wbuf, 1, &b, flags, NULL, NULL); if (r != SOCKET_ERROR && b > 0) /* Write succeeded right away */ return b; if (r == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) { TranslateSocketError(); return -1; } if (pgwin32_noblock) { /* * No data sent, and we are in "emulated non-blocking mode", so * return indicating that we'd block if we were to continue. */ errno = EWOULDBLOCK; return -1; } /* No error, zero bytes (win2000+) or error+WSAEWOULDBLOCK (<=nt4) */ if (pgwin32_waitforsinglesocket(s, FD_WRITE | FD_CLOSE, INFINITE) == 0) return -1; } return -1; }
void pgwin32_signal_initialize | ( | void | ) |
Definition at line 67 of file signal.c.
References ereport, errmsg_internal(), FALSE, FATAL, i, NULL, pg_console_handler(), pg_signal_array, pg_signal_crit_sec, pg_signal_defaults, pg_signal_mask, pg_signal_queue, pg_signal_thread(), pgwin32_signal_event, and TRUE.
Referenced by main().
{ int i; HANDLE signal_thread_handle; InitializeCriticalSection(&pg_signal_crit_sec); for (i = 0; i < PG_SIGNAL_COUNT; i++) { pg_signal_array[i] = SIG_DFL; pg_signal_defaults[i] = SIG_IGN; } pg_signal_mask = 0; pg_signal_queue = 0; /* Create the global event handle used to flag signals */ pgwin32_signal_event = CreateEvent(NULL, TRUE, FALSE, NULL); if (pgwin32_signal_event == NULL) ereport(FATAL, (errmsg_internal("could not create signal event: error code %lu", GetLastError()))); /* Create thread for handling signals */ signal_thread_handle = CreateThread(NULL, 0, pg_signal_thread, NULL, 0, NULL); if (signal_thread_handle == NULL) ereport(FATAL, (errmsg_internal("could not create signal handler thread"))); /* Create console control handle to pick up Ctrl-C etc */ if (!SetConsoleCtrlHandler(pg_console_handler, TRUE)) ereport(FATAL, (errmsg_internal("could not set console control handler"))); }
SOCKET pgwin32_socket | ( | int | af, | |
int | type, | |||
int | protocol | |||
) |
Definition at line 242 of file socket.c.
References NULL, and TranslateSocketError().
{ SOCKET s; unsigned long on = 1; s = WSASocket(af, type, protocol, NULL, 0, WSA_FLAG_OVERLAPPED); if (s == INVALID_SOCKET) { TranslateSocketError(); return INVALID_SOCKET; } if (ioctlsocket(s, FIONBIO, &on)) { TranslateSocketError(); return INVALID_SOCKET; } errno = 0; return s; }
const char* pgwin32_socket_strerror | ( | int | err | ) |
Definition at line 652 of file socket.c.
References ereport, errmsg_internal(), FATAL, NULL, and wserrbuf.
Referenced by useful_strerror().
{ static HANDLE handleDLL = INVALID_HANDLE_VALUE; if (handleDLL == INVALID_HANDLE_VALUE) { handleDLL = LoadLibraryEx("netmsg.dll", NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); if (handleDLL == NULL) ereport(FATAL, (errmsg_internal("could not load netmsg.dll: error code %lu", GetLastError()))); } ZeroMemory(&wserrbuf, sizeof(wserrbuf)); if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, handleDLL, err, MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), wserrbuf, sizeof(wserrbuf) - 1, NULL) == 0) { /* Failed to get id */ sprintf(wserrbuf, "unrecognized winsock error %d", err); } return wserrbuf; }
void pgwin32_unsetenv | ( | const char * | ) |
Definition at line 154 of file win32env.c.
References free, malloc, and pgwin32_putenv().
{ char *envbuf; envbuf = (char *) malloc(strlen(name) + 2); if (!envbuf) return; sprintf(envbuf, "%s=", name); pgwin32_putenv(envbuf); free(envbuf); }
int pgwin32_waitforsinglesocket | ( | SOCKET | s, | |
int | what, | |||
int | timeout | |||
) |
Definition at line 132 of file socket.c.
References buf, ereport, errmsg_internal(), ERROR, FALSE, isDataGram(), NULL, pgwin32_dispatch_queued_signals(), pgwin32_signal_event, TranslateSocketError(), and TRUE.
Referenced by pgwin32_connect(), pgwin32_recv(), pgwin32_send(), secure_read(), and secure_write().
{ static HANDLE waitevent = INVALID_HANDLE_VALUE; static SOCKET current_socket = -1; static int isUDP = 0; HANDLE events[2]; int r; /* Create an event object just once and use it on all future calls */ if (waitevent == INVALID_HANDLE_VALUE) { waitevent = CreateEvent(NULL, TRUE, FALSE, NULL); if (waitevent == INVALID_HANDLE_VALUE) ereport(ERROR, (errmsg_internal("could not create socket waiting event: error code %lu", GetLastError()))); } else if (!ResetEvent(waitevent)) ereport(ERROR, (errmsg_internal("could not reset socket waiting event: error code %lu", GetLastError()))); /* * Track whether socket is UDP or not. (NB: most likely, this is both * useless and wrong; there is no reason to think that the behavior of * WSAEventSelect is different for TCP and UDP.) */ if (current_socket != s) isUDP = isDataGram(s); current_socket = s; /* * Attach event to socket. NOTE: we must detach it again before * returning, since other bits of code may try to attach other events to * the socket. */ if (WSAEventSelect(s, waitevent, what) != 0) { TranslateSocketError(); return 0; } events[0] = pgwin32_signal_event; events[1] = waitevent; /* * Just a workaround of unknown locking problem with writing in UDP socket * under high load: Client's pgsql backend sleeps infinitely in * WaitForMultipleObjectsEx, pgstat process sleeps in pgwin32_select(). * So, we will wait with small timeout(0.1 sec) and if sockect is still * blocked, try WSASend (see comments in pgwin32_select) and wait again. */ if ((what & FD_WRITE) && isUDP) { for (;;) { r = WaitForMultipleObjectsEx(2, events, FALSE, 100, TRUE); if (r == WAIT_TIMEOUT) { char c; WSABUF buf; DWORD sent; buf.buf = &c; buf.len = 0; r = WSASend(s, &buf, 1, &sent, 0, NULL, NULL); if (r == 0) /* Completed - means things are fine! */ { WSAEventSelect(s, NULL, 0); return 1; } else if (WSAGetLastError() != WSAEWOULDBLOCK) { TranslateSocketError(); WSAEventSelect(s, NULL, 0); return 0; } } else break; } } else r = WaitForMultipleObjectsEx(2, events, FALSE, timeout, TRUE); WSAEventSelect(s, NULL, 0); if (r == WAIT_OBJECT_0 || r == WAIT_IO_COMPLETION) { pgwin32_dispatch_queued_signals(); errno = EINTR; return 0; } if (r == WAIT_OBJECT_0 + 1) return 1; if (r == WAIT_TIMEOUT) { errno = EWOULDBLOCK; return 0; } ereport(ERROR, (errmsg_internal("unrecognized return value from WaitForMultipleObjects: %d (error code %lu)", r, GetLastError()))); return 0; }
Definition at line 86 of file timer.c.
References Assert, timerCA::crit_sec, ereport, errmsg_internal(), timerCA::event, FALSE, FATAL, itimerval::it_interval, ITIMER_REAL, MemSet, NULL, pg_timer_thread(), timerThreadHandle, TRUE, and timerCA::value.
Referenced by disable_all_timeouts(), fork_process(), and schedule_alarm().
{ Assert(value != NULL); Assert(value->it_interval.tv_sec == 0 && value->it_interval.tv_usec == 0); Assert(which == ITIMER_REAL); if (timerThreadHandle == INVALID_HANDLE_VALUE) { /* First call in this backend, create event and the timer thread */ timerCommArea.event = CreateEvent(NULL, TRUE, FALSE, NULL); if (timerCommArea.event == NULL) ereport(FATAL, (errmsg_internal("could not create timer event: error code %lu", GetLastError()))); MemSet(&timerCommArea.value, 0, sizeof(struct itimerval)); InitializeCriticalSection(&timerCommArea.crit_sec); timerThreadHandle = CreateThread(NULL, 0, pg_timer_thread, NULL, 0, NULL); if (timerThreadHandle == INVALID_HANDLE_VALUE) ereport(FATAL, (errmsg_internal("could not create timer thread: error code %lu", GetLastError()))); } /* Request the timer thread to change settings */ EnterCriticalSection(&timerCommArea.crit_sec); if (ovalue) *ovalue = timerCommArea.value; timerCommArea.value = *value; LeaveCriticalSection(&timerCommArea.crit_sec); SetEvent(timerCommArea.event); return 0; }
PGDLLIMPORT int pg_signal_mask |
Definition at line 25 of file signal.c.
Referenced by pgwin32_signal_initialize(), and pqsigsetmask().
PGDLLIMPORT volatile int pg_signal_queue |
Definition at line 24 of file signal.c.
Referenced by pg_queue_signal(), pgwin32_dispatch_queued_signals(), and pgwin32_signal_initialize().
HANDLE pgwin32_initial_signal_pipe |
Definition at line 28 of file signal.c.
Referenced by pg_signal_thread().
int pgwin32_noblock |
Definition at line 28 of file socket.c.
Referenced by PgstatCollectorMain(), pgwin32_recv(), pgwin32_send(), and pq_set_nonblocking().
HANDLE pgwin32_signal_event |
Definition at line 27 of file signal.c.
Referenced by pg_queue_signal(), pg_usleep(), PGSemaphoreLock(), pgwin32_dispatch_queued_signals(), pgwin32_select(), pgwin32_signal_initialize(), pgwin32_waitforsinglesocket(), and WaitLatchOrSocket().