mirror of
https://github.com/postgres/postgres.git
synced 2025-06-23 14:01:44 +03:00
Clean up order in miscinit.c a bit
The code around InitPostmasterChild() from commit 31c453165b
somehow
ended up in the middle of a block of code related to "User ID state".
Move it into its own block instead.
This commit is contained in:
@ -75,6 +75,119 @@ static Latch LocalLatchData;
|
||||
bool IgnoreSystemIndexes = false;
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* common process startup code
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
* Initialize the basic environment for a postmaster child
|
||||
*
|
||||
* Should be called as early as possible after the child's startup.
|
||||
*/
|
||||
void
|
||||
InitPostmasterChild(void)
|
||||
{
|
||||
IsUnderPostmaster = true; /* we are a postmaster subprocess now */
|
||||
|
||||
InitProcessGlobals();
|
||||
|
||||
/*
|
||||
* make sure stderr is in binary mode before anything can possibly be
|
||||
* written to it, in case it's actually the syslogger pipe, so the pipe
|
||||
* chunking protocol isn't disturbed. Non-logpipe data gets translated on
|
||||
* redirection (e.g. via pg_ctl -l) anyway.
|
||||
*/
|
||||
#ifdef WIN32
|
||||
_setmode(fileno(stderr), _O_BINARY);
|
||||
#endif
|
||||
|
||||
/* We don't want the postmaster's proc_exit() handlers */
|
||||
on_exit_reset();
|
||||
|
||||
/* Initialize process-local latch support */
|
||||
InitializeLatchSupport();
|
||||
MyLatch = &LocalLatchData;
|
||||
InitLatch(MyLatch);
|
||||
|
||||
/*
|
||||
* If possible, make this process a group leader, so that the postmaster
|
||||
* can signal any child processes too. Not all processes will have
|
||||
* children, but for consistency we make all postmaster child processes do
|
||||
* this.
|
||||
*/
|
||||
#ifdef HAVE_SETSID
|
||||
if (setsid() < 0)
|
||||
elog(FATAL, "setsid() failed: %m");
|
||||
#endif
|
||||
|
||||
/* Request a signal if the postmaster dies, if possible. */
|
||||
PostmasterDeathSignalInit();
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the basic environment for a standalone process.
|
||||
*
|
||||
* argv0 has to be suitable to find the program's executable.
|
||||
*/
|
||||
void
|
||||
InitStandaloneProcess(const char *argv0)
|
||||
{
|
||||
Assert(!IsPostmasterEnvironment);
|
||||
|
||||
InitProcessGlobals();
|
||||
|
||||
/* Initialize process-local latch support */
|
||||
InitializeLatchSupport();
|
||||
MyLatch = &LocalLatchData;
|
||||
InitLatch(MyLatch);
|
||||
|
||||
/* Compute paths, no postmaster to inherit from */
|
||||
if (my_exec_path[0] == '\0')
|
||||
{
|
||||
if (find_my_exec(argv0, my_exec_path) < 0)
|
||||
elog(FATAL, "%s: could not locate my own executable path",
|
||||
argv0);
|
||||
}
|
||||
|
||||
if (pkglib_path[0] == '\0')
|
||||
get_pkglib_path(my_exec_path, pkglib_path);
|
||||
}
|
||||
|
||||
void
|
||||
SwitchToSharedLatch(void)
|
||||
{
|
||||
Assert(MyLatch == &LocalLatchData);
|
||||
Assert(MyProc != NULL);
|
||||
|
||||
MyLatch = &MyProc->procLatch;
|
||||
|
||||
if (FeBeWaitSet)
|
||||
ModifyWaitEvent(FeBeWaitSet, 1, WL_LATCH_SET, MyLatch);
|
||||
|
||||
/*
|
||||
* Set the shared latch as the local one might have been set. This
|
||||
* shouldn't normally be necessary as code is supposed to check the
|
||||
* condition before waiting for the latch, but a bit care can't hurt.
|
||||
*/
|
||||
SetLatch(MyLatch);
|
||||
}
|
||||
|
||||
void
|
||||
SwitchBackToLocalLatch(void)
|
||||
{
|
||||
Assert(MyLatch != &LocalLatchData);
|
||||
Assert(MyProc != NULL && MyLatch == &MyProc->procLatch);
|
||||
|
||||
MyLatch = &LocalLatchData;
|
||||
|
||||
if (FeBeWaitSet)
|
||||
ModifyWaitEvent(FeBeWaitSet, 1, WL_LATCH_SET, MyLatch);
|
||||
|
||||
SetLatch(MyLatch);
|
||||
}
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* database path / name support stuff
|
||||
* ----------------------------------------------------------------
|
||||
@ -262,113 +375,6 @@ static int SecurityRestrictionContext = 0;
|
||||
/* We also remember if a SET ROLE is currently active */
|
||||
static bool SetRoleIsActive = false;
|
||||
|
||||
/*
|
||||
* Initialize the basic environment for a postmaster child
|
||||
*
|
||||
* Should be called as early as possible after the child's startup.
|
||||
*/
|
||||
void
|
||||
InitPostmasterChild(void)
|
||||
{
|
||||
IsUnderPostmaster = true; /* we are a postmaster subprocess now */
|
||||
|
||||
InitProcessGlobals();
|
||||
|
||||
/*
|
||||
* make sure stderr is in binary mode before anything can possibly be
|
||||
* written to it, in case it's actually the syslogger pipe, so the pipe
|
||||
* chunking protocol isn't disturbed. Non-logpipe data gets translated on
|
||||
* redirection (e.g. via pg_ctl -l) anyway.
|
||||
*/
|
||||
#ifdef WIN32
|
||||
_setmode(fileno(stderr), _O_BINARY);
|
||||
#endif
|
||||
|
||||
/* We don't want the postmaster's proc_exit() handlers */
|
||||
on_exit_reset();
|
||||
|
||||
/* Initialize process-local latch support */
|
||||
InitializeLatchSupport();
|
||||
MyLatch = &LocalLatchData;
|
||||
InitLatch(MyLatch);
|
||||
|
||||
/*
|
||||
* If possible, make this process a group leader, so that the postmaster
|
||||
* can signal any child processes too. Not all processes will have
|
||||
* children, but for consistency we make all postmaster child processes do
|
||||
* this.
|
||||
*/
|
||||
#ifdef HAVE_SETSID
|
||||
if (setsid() < 0)
|
||||
elog(FATAL, "setsid() failed: %m");
|
||||
#endif
|
||||
|
||||
/* Request a signal if the postmaster dies, if possible. */
|
||||
PostmasterDeathSignalInit();
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the basic environment for a standalone process.
|
||||
*
|
||||
* argv0 has to be suitable to find the program's executable.
|
||||
*/
|
||||
void
|
||||
InitStandaloneProcess(const char *argv0)
|
||||
{
|
||||
Assert(!IsPostmasterEnvironment);
|
||||
|
||||
InitProcessGlobals();
|
||||
|
||||
/* Initialize process-local latch support */
|
||||
InitializeLatchSupport();
|
||||
MyLatch = &LocalLatchData;
|
||||
InitLatch(MyLatch);
|
||||
|
||||
/* Compute paths, no postmaster to inherit from */
|
||||
if (my_exec_path[0] == '\0')
|
||||
{
|
||||
if (find_my_exec(argv0, my_exec_path) < 0)
|
||||
elog(FATAL, "%s: could not locate my own executable path",
|
||||
argv0);
|
||||
}
|
||||
|
||||
if (pkglib_path[0] == '\0')
|
||||
get_pkglib_path(my_exec_path, pkglib_path);
|
||||
}
|
||||
|
||||
void
|
||||
SwitchToSharedLatch(void)
|
||||
{
|
||||
Assert(MyLatch == &LocalLatchData);
|
||||
Assert(MyProc != NULL);
|
||||
|
||||
MyLatch = &MyProc->procLatch;
|
||||
|
||||
if (FeBeWaitSet)
|
||||
ModifyWaitEvent(FeBeWaitSet, 1, WL_LATCH_SET, MyLatch);
|
||||
|
||||
/*
|
||||
* Set the shared latch as the local one might have been set. This
|
||||
* shouldn't normally be necessary as code is supposed to check the
|
||||
* condition before waiting for the latch, but a bit care can't hurt.
|
||||
*/
|
||||
SetLatch(MyLatch);
|
||||
}
|
||||
|
||||
void
|
||||
SwitchBackToLocalLatch(void)
|
||||
{
|
||||
Assert(MyLatch != &LocalLatchData);
|
||||
Assert(MyProc != NULL && MyLatch == &MyProc->procLatch);
|
||||
|
||||
MyLatch = &LocalLatchData;
|
||||
|
||||
if (FeBeWaitSet)
|
||||
ModifyWaitEvent(FeBeWaitSet, 1, WL_LATCH_SET, MyLatch);
|
||||
|
||||
SetLatch(MyLatch);
|
||||
}
|
||||
|
||||
/*
|
||||
* GetUserId - get the current effective user ID.
|
||||
*
|
||||
|
@ -303,8 +303,13 @@ extern char *DatabasePath;
|
||||
/* now in utils/init/miscinit.c */
|
||||
extern void InitPostmasterChild(void);
|
||||
extern void InitStandaloneProcess(const char *argv0);
|
||||
extern void SwitchToSharedLatch(void);
|
||||
extern void SwitchBackToLocalLatch(void);
|
||||
|
||||
extern void SetDatabasePath(const char *path);
|
||||
extern void checkDataDir(void);
|
||||
extern void SetDataDir(const char *dir);
|
||||
extern void ChangeToDataDir(void);
|
||||
|
||||
extern char *GetUserNameFromId(Oid roleid, bool noerr);
|
||||
extern Oid GetUserId(void);
|
||||
@ -324,13 +329,6 @@ extern void SetSessionAuthorization(Oid userid, bool is_superuser);
|
||||
extern Oid GetCurrentRoleId(void);
|
||||
extern void SetCurrentRoleId(Oid roleid, bool is_superuser);
|
||||
|
||||
extern void checkDataDir(void);
|
||||
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 */
|
||||
|
Reference in New Issue
Block a user