From 59f71a0d0b56b2df48db4bf1738aece5551f7a47 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Wed, 14 Jan 2015 18:45:22 +0100 Subject: Add a default local latch for use in signal handlers. To do so, move InitializeLatchSupport() into the new common process initialization functions, and add a new global variable MyLatch. MyLatch is usable as soon InitPostmasterChild() has been called (i.e. very early during startup). Initially it points to a process local latch that exists in all processes. InitProcess/InitAuxiliaryProcess then replaces that local latch with PGPROC->procLatch. During shutdown the reverse happens. This is primarily advantageous for two reasons: For one it simplifies dealing with the shared process latch, especially in signal handlers, because instead of having to check for MyProc, MyLatch can be used unconditionally. For another, a later patch that makes FEs/BE communication use latches, now can rely on the existence of a latch, even before having gone through InitProcess. Discussion: 20140927191243.GD5423@alap3.anarazel.de --- src/include/miscadmin.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/include/miscadmin.h') diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index b94a94499b7..6e33a172122 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -148,6 +148,7 @@ extern int max_worker_processes; extern PGDLLIMPORT int MyProcPid; extern PGDLLIMPORT pg_time_t MyStartTime; extern PGDLLIMPORT struct Port *MyProcPort; +extern PGDLLIMPORT struct Latch *MyLatch; extern long MyCancelKey; extern int MyPMChildSlot; @@ -302,6 +303,9 @@ extern void SetCurrentRoleId(Oid roleid, bool is_superuser); extern void SetDataDir(const char *dir); extern void ChangeToDataDir(void); +extern void SwitchToSharedLatch(void); +extern void SwitchBackToLocalLatch(void); + /* in utils/misc/superuser.c */ extern bool superuser(void); /* current user is superuser */ extern bool superuser_arg(Oid roleid); /* given user is superuser */ -- cgit v1.2.3