1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Replace the confusing exit_nicely() by an atexit/on_exit hook

This commit is contained in:
Peter Eisentraut
2011-04-06 23:00:44 +03:00
parent 2bd78eb8d5
commit c75163842c
5 changed files with 37 additions and 43 deletions

View File

@ -23,7 +23,7 @@ static bool test_server_conn(ClusterInfo *cluster, int timeout);
*
* Connects to the desired database on the designated server.
* If the connection attempt fails, this function logs an error
* message and calls exit_nicely() to kill the program.
* message and calls exit() to kill the program.
*/
PGconn *
connectToServer(ClusterInfo *cluster, const char *db_name)
@ -45,7 +45,8 @@ connectToServer(ClusterInfo *cluster, const char *db_name)
if (conn)
PQfinish(conn);
exit_nicely(true);
printf("Failure, exiting\n");
exit(1);
}
return conn;
@ -57,7 +58,7 @@ connectToServer(ClusterInfo *cluster, const char *db_name)
*
* Formats a query string from the given arguments and executes the
* resulting query. If the query fails, this function logs an error
* message and calls exit_nicely() to kill the program.
* message and calls exit() to kill the program.
*/
PGresult *
executeQueryOrDie(PGconn *conn, const char *fmt,...)
@ -81,8 +82,8 @@ executeQueryOrDie(PGconn *conn, const char *fmt,...)
PQerrorMessage(conn));
PQclear(result);
PQfinish(conn);
exit_nicely(true);
return NULL; /* Never get here, but keeps compiler happy */
printf("Failure, exiting\n");
exit(1);
}
else
return result;
@ -152,6 +153,18 @@ get_major_server_version(ClusterInfo *cluster)
}
static void
#ifdef HAVE_ATEXIT
stop_postmaster_atexit(void)
#else
stop_postmaster_on_exit(int exitstatus, void *arg)
#endif
{
stop_postmaster(true, true);
}
void
start_postmaster(ClusterInfo *cluster, bool quiet)
{
@ -159,11 +172,22 @@ start_postmaster(ClusterInfo *cluster, bool quiet)
const char *bindir;
const char *datadir;
unsigned short port;
bool exit_hook_registered = false;
bindir = cluster->bindir;
datadir = cluster->pgdata;
port = cluster->port;
if (!exit_hook_registered)
{
#ifdef HAVE_ATEXIT
atexit(stop_postmaster_atexit);
#else
on_exit(stop_postmaster_on_exit);
#endif
exit_hook_registered = true;
}
/*
* On Win32, we can't send both pg_upgrade output and pg_ctl output to the
* same file because we get the error: "The process cannot access the file