Hackfut Security File Manager
Current Path:
/opt/alt/postgresql11/usr/include/pgsql/server/storage
opt
/
alt
/
postgresql11
/
usr
/
include
/
pgsql
/
server
/
storage
/
📁
..
📄
backendid.h
(730 B)
📄
barrier.h
(6.6 KB)
📄
block.h
(3.21 KB)
📄
buf.h
(1.06 KB)
📄
buf_internals.h
(7.79 KB)
📄
buffile.h
(1.67 KB)
📄
bufmgr.h
(7.2 KB)
📄
bufpage.h
(12.91 KB)
📄
copydir.h
(561 B)
📄
fd.h
(3.56 KB)
📄
freespace.h
(1.23 KB)
📄
fsm_internals.h
(2.24 KB)
📄
indexfsm.h
(795 B)
📄
ipc.h
(2.54 KB)
📄
item.h
(469 B)
📄
itemid.h
(4.24 KB)
📄
itemptr.h
(3.72 KB)
📄
large_object.h
(2.89 KB)
📄
latch.h
(5.28 KB)
📄
lmgr.h
(3.22 KB)
📄
lock.h
(21.16 KB)
📄
lwlock.h
(3.58 KB)
📄
off.h
(1.58 KB)
📄
pg_sema.h
(2.41 KB)
📄
pg_shmem.h
(1.95 KB)
📄
pmsignal.h
(2.03 KB)
📄
pos.h
(1.56 KB)
📄
predicate.h
(2.56 KB)
📄
predicate_internals.h
(16.98 KB)
📄
proc.h
(9.58 KB)
📄
procarray.h
(2.96 KB)
📄
procsignal.h
(1.76 KB)
📄
reinit.h
(588 B)
📄
relfilenode.h
(4.31 KB)
📄
s_lock.h
(28 KB)
📄
shmem.h
(2.63 KB)
📄
sinval.h
(4.97 KB)
📄
sinvaladt.h
(1.49 KB)
📄
smgr.h
(5.67 KB)
📄
spin.h
(2.71 KB)
📄
standby.h
(3.97 KB)
Editing: latch.h
/*------------------------------------------------------------------------- * * latch.h * Routines for interprocess latches * * A latch is a boolean variable, with operations that let processes sleep * until it is set. A latch can be set from another process, or a signal * handler within the same process. * * The latch interface is a reliable replacement for the common pattern of * using pg_usleep() or select() to wait until a signal arrives, where the * signal handler sets a flag variable. Because on some platforms an * incoming signal doesn't interrupt sleep, and even on platforms where it * does there is a race condition if the signal arrives just before * entering the sleep, the common pattern must periodically wake up and * poll the flag variable. The pselect() system call was invented to solve * this problem, but it is not portable enough. Latches are designed to * overcome these limitations, allowing you to sleep without polling and * ensuring quick response to signals from other processes. * * There are two kinds of latches: local and shared. A local latch is * initialized by InitLatch, and can only be set from the same process. * A local latch can be used to wait for a signal to arrive, by calling * SetLatch in the signal handler. A shared latch resides in shared memory, * and must be initialized at postmaster startup by InitSharedLatch. Before * a shared latch can be waited on, it must be associated with a process * with OwnLatch. Only the process owning the latch can wait on it, but any * process can set it. * * There are three basic operations on a latch: * * SetLatch - Sets the latch * ResetLatch - Clears the latch, allowing it to be set again * WaitLatch - Waits for the latch to become set * * WaitLatch 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 unix_latch.c for detailed specifications for the exported functions. * * The correct pattern to wait for event(s) is: * * for (;;) * { * ResetLatch(); * if (work to do) * Do Stuff(); * WaitLatch(); * } * * It's important to reset the latch *before* checking if there's work to * do. Otherwise, if someone sets the latch between the check and the * ResetLatch call, you will miss it and Wait will incorrectly block. * * To wake up the waiter, you must first set a global flag or something * else that the wait loop tests in the "if (work to do)" part, and call * SetLatch *after* that. SetLatch is designed to return quickly if the * latch is already set. * * Presently, when using a shared latch for interprocess signalling, the * flag variable(s) set by senders and inspected by the wait loop must * be protected by spinlocks or LWLocks, else it is possible to miss events * on machines with weak memory ordering (such as PPC). This restriction * will be lifted in future by inserting suitable memory barriers into * SetLatch and ResetLatch. * * On some platforms, signals will not interrupt the latch wait primitive * by themselves. Therefore, it is critical that any signal handler that * is meant to terminate a WaitLatch wait calls SetLatch. * * Note that use of the process latch (PGPROC.procLatch) is generally better * than an ad-hoc shared latch for signaling auxiliary processes. This is * because generic signal handlers will call SetLatch on the process latch * only, so using any latch other than the process latch effectively precludes * use of any generic handler. * * * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/storage/latch.h * *------------------------------------------------------------------------- */ #ifndef LATCH_H #define LATCH_H #include <signal.h> /* * Latch structure should be treated as opaque and only accessed through * the public functions. It is defined here to allow embedding Latches as * part of bigger structs. */ typedef struct { sig_atomic_t is_set; bool is_shared; int owner_pid; #ifdef WIN32 HANDLE event; #endif } Latch; /* Bitmasks for events that may wake-up WaitLatch() clients */ #define WL_LATCH_SET (1 << 0) #define WL_SOCKET_READABLE (1 << 1) #define WL_SOCKET_WRITEABLE (1 << 2) #define WL_TIMEOUT (1 << 3) #define WL_POSTMASTER_DEATH (1 << 4) /* * prototypes for functions in latch.c */ extern void InitializeLatchSupport(void); extern void InitLatch(volatile Latch *latch); extern void InitSharedLatch(volatile Latch *latch); extern void OwnLatch(volatile Latch *latch); extern void DisownLatch(volatile Latch *latch); extern int WaitLatch(volatile Latch *latch, int wakeEvents, long timeout); extern int WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, long timeout); extern void SetLatch(volatile Latch *latch); extern void ResetLatch(volatile Latch *latch); /* beware of memory ordering issues if you use this macro! */ #define TestLatch(latch) (((volatile Latch *) (latch))->is_set) /* * Unix implementation uses SIGUSR1 for inter-process signaling. * Win32 doesn't need this. */ #ifndef WIN32 extern void latch_sigusr1_handler(void); #else #define latch_sigusr1_handler() ((void) 0) #endif #endif /* LATCH_H */
Upload File
Create Folder