diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/replication/walsender.h | 10 | ||||
| -rw-r--r-- | src/include/storage/latch.h | 62 |
2 files changed, 71 insertions, 1 deletions
diff --git a/src/include/replication/walsender.h b/src/include/replication/walsender.h index 891fea57bc..87e01207c1 100644 --- a/src/include/replication/walsender.h +++ b/src/include/replication/walsender.h @@ -5,7 +5,7 @@ * * Portions Copyright (c) 2010-2010, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/replication/walsender.h,v 1.4 2010/06/17 00:06:34 itagaki Exp $ + * $PostgreSQL: pgsql/src/include/replication/walsender.h,v 1.5 2010/09/11 15:48:04 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -13,6 +13,7 @@ #define _WALSENDER_H #include "access/xlog.h" +#include "storage/latch.h" #include "storage/spin.h" /* @@ -24,6 +25,12 @@ typedef struct WalSnd XLogRecPtr sentPtr; /* WAL has been sent up to this point */ slock_t mutex; /* locks shared variables shown above */ + + /* + * Latch used by backends to wake up this walsender when it has work + * to do. + */ + Latch latch; } WalSnd; /* There is one WalSndCtl struct for the whole database cluster */ @@ -45,5 +52,6 @@ extern int WalSenderMain(void); extern void WalSndSignals(void); extern Size WalSndShmemSize(void); extern void WalSndShmemInit(void); +extern void WalSndWakeup(void); #endif /* _WALSENDER_H */ diff --git a/src/include/storage/latch.h b/src/include/storage/latch.h new file mode 100644 index 0000000000..2c697741e4 --- /dev/null +++ b/src/include/storage/latch.h @@ -0,0 +1,62 @@ +/*------------------------------------------------------------------------- + * + * latch.h + * Routines for interprocess latches + * + * + * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * $PostgreSQL: pgsql/src/include/storage/latch.h,v 1.1 2010/09/11 15:48:04 heikki Exp $ + * + *------------------------------------------------------------------------- + */ +#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; +#ifndef WIN32 + int owner_pid; +#else + HANDLE event; +#endif +} Latch; + +/* + * prototypes for functions in latch.c + */ +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 bool WaitLatch(volatile Latch *latch, long timeout); +extern int WaitLatchOrSocket(volatile Latch *latch, pgsocket sock, + long timeout); +extern void SetLatch(volatile Latch *latch); +extern void ResetLatch(volatile Latch *latch); +#define TestLatch(latch) (((volatile Latch *) latch)->is_set) + +extern Size LatchShmemSize(void); +extern void LatchShmemInit(void); + +/* + * 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() +#endif + +#endif /* LATCH_H */ |
