/*-------------------------------------------------------------------------
*
* waiteventset . h
* ppoll ( ) / pselect ( ) like interface for waiting for events
*
* WaitEventSets allow to wait for latches being set and additional events -
* postmaster dying and socket readiness of several sockets currently - at the
* same time . On many platforms using a long lived event set is more
* efficient than using WaitLatch or WaitLatchOrSocket .
*
* WaitEventSetWait includes a provision for timeouts ( which should be avoided
* when possible , as they incur extra overhead ) and a provision for postmaster
* child processes to wake up immediately on postmaster death . See
* storage / ipc / waiteventset . c for detailed specifications for the exported
* functions .
*
*
* Portions Copyright ( c ) 1996 - 2025 , PostgreSQL Global Development Group
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
* src / include / storage / waiteventset . h
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
#ifndef WAITEVENTSET_H
#define WAITEVENTSET_H
#include "utils/resowner.h"
/*
* Bitmasks for events that may wake - up WaitLatch ( ) , WaitLatchOrSocket ( ) , or
* WaitEventSetWait ( ) .
*/
#define WL_LATCH_SET (1 << 0 )
#define WL_SOCKET_READABLE (1 << 1 )
#define WL_SOCKET_WRITEABLE (1 << 2 )
#define WL_TIMEOUT (1 << 3 ) /* not for WaitEventSetWait() */
#define WL_POSTMASTER_DEATH (1 << 4 )
#define WL_EXIT_ON_PM_DEATH (1 << 5 )
#ifdef WIN32
#define WL_SOCKET_CONNECTED (1 << 6 )
#else
/* avoid having to deal with case on platforms not requiring it */
#define WL_SOCKET_CONNECTED WL_SOCKET_WRITEABLE
#endif
#define WL_SOCKET_CLOSED (1 << 7 )
#ifdef WIN32
#define WL_SOCKET_ACCEPT (1 << 8 )
#else
/* avoid having to deal with case on platforms not requiring it */
#define WL_SOCKET_ACCEPT WL_SOCKET_READABLE
#endif
#define WL_SOCKET_MASK (WL_SOCKET_READABLE | \
WL_SOCKET_WRITEABLE | \
WL_SOCKET_CONNECTED | \
WL_SOCKET_ACCEPT | \
WL_SOCKET_CLOSED)
typedef struct WaitEvent
{
int pos; /* position in the event data structure */
uint32 events; /* triggered events */
pgsocket fd; /* socket fd associated with event */
void *user_data; /* pointer provided in AddWaitEventToSet */
#ifdef WIN32
bool reset; /* Is reset of the event required? */
#endif
} WaitEvent;
/* forward declarations to avoid exposing waiteventset.c implementation details */
typedef struct WaitEventSet WaitEventSet;
struct Latch;
/*
* prototypes for functions in waiteventset . c
*/
extern void InitializeWaitEventSupport(void );
extern WaitEventSet *CreateWaitEventSet(ResourceOwner resowner, int nevents);
extern void FreeWaitEventSet(WaitEventSet *set);
extern void FreeWaitEventSetAfterFork(WaitEventSet *set);
extern int AddWaitEventToSet(WaitEventSet *set, uint32 events, pgsocket fd,
struct Latch *latch, void *user_data);
extern void ModifyWaitEvent(WaitEventSet *set, int pos, uint32 events,
struct Latch *latch);
extern int WaitEventSetWait(WaitEventSet *set, long timeout,
WaitEvent *occurred_events, int nevents,
uint32 wait_event_info);
extern int GetNumRegisteredWaitEvents(WaitEventSet *set);
extern bool WaitEventSetCanReportClosed(void );
#ifndef WIN32
extern void WakeupMyProc(void );
extern void WakeupOtherProc(int pid);
#endif
#endif /* WAITEVENTSET_H */
Messung V0.5 in Prozent C=84 H=100 G=92
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-08-08)
¤
*© Formatika GbR, Deutschland