Replace the confusing exit_nicely() by an atexit/on_exit hook
This commit is contained in:
parent
2bd78eb8d5
commit
c75163842c
@ -131,7 +131,7 @@ report_clusters_compatible(void)
|
|||||||
pg_log(PG_REPORT, "\n*Clusters are compatible*\n");
|
pg_log(PG_REPORT, "\n*Clusters are compatible*\n");
|
||||||
/* stops new cluster */
|
/* stops new cluster */
|
||||||
stop_postmaster(false, false);
|
stop_postmaster(false, false);
|
||||||
exit_nicely(false);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
pg_log(PG_REPORT, "\n"
|
pg_log(PG_REPORT, "\n"
|
||||||
|
@ -77,12 +77,12 @@ parseCommandLine(int argc, char *argv[])
|
|||||||
strcmp(argv[1], "-?") == 0)
|
strcmp(argv[1], "-?") == 0)
|
||||||
{
|
{
|
||||||
usage();
|
usage();
|
||||||
exit_nicely(false);
|
exit(0);
|
||||||
}
|
}
|
||||||
if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
|
if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
|
||||||
{
|
{
|
||||||
pg_log(PG_REPORT, "pg_upgrade " PG_VERSION "\n");
|
pg_log(PG_REPORT, "pg_upgrade " PG_VERSION "\n");
|
||||||
exit_nicely(false);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ parseCommandLine(int argc, char *argv[])
|
|||||||
if ((log_opts.debug_fd = fopen(optarg, "w")) == NULL)
|
if ((log_opts.debug_fd = fopen(optarg, "w")) == NULL)
|
||||||
{
|
{
|
||||||
pg_log(PG_FATAL, "cannot open debug file\n");
|
pg_log(PG_FATAL, "cannot open debug file\n");
|
||||||
exit_nicely(false);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ parseCommandLine(int argc, char *argv[])
|
|||||||
if ((old_cluster.port = atoi(optarg)) <= 0)
|
if ((old_cluster.port = atoi(optarg)) <= 0)
|
||||||
{
|
{
|
||||||
pg_log(PG_FATAL, "invalid old port number\n");
|
pg_log(PG_FATAL, "invalid old port number\n");
|
||||||
exit_nicely(false);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ parseCommandLine(int argc, char *argv[])
|
|||||||
if ((new_cluster.port = atoi(optarg)) <= 0)
|
if ((new_cluster.port = atoi(optarg)) <= 0)
|
||||||
{
|
{
|
||||||
pg_log(PG_FATAL, "invalid new port number\n");
|
pg_log(PG_FATAL, "invalid new port number\n");
|
||||||
exit_nicely(false);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -363,7 +363,6 @@ void check_for_libpq_envvars(void);
|
|||||||
|
|
||||||
/* util.c */
|
/* util.c */
|
||||||
|
|
||||||
void exit_nicely(bool need_cleanup);
|
|
||||||
char *quote_identifier(const char *s);
|
char *quote_identifier(const char *s);
|
||||||
int get_user_info(char **user_name);
|
int get_user_info(char **user_name);
|
||||||
void check_ok(void);
|
void check_ok(void);
|
||||||
|
@ -23,7 +23,7 @@ static bool test_server_conn(ClusterInfo *cluster, int timeout);
|
|||||||
*
|
*
|
||||||
* Connects to the desired database on the designated server.
|
* Connects to the desired database on the designated server.
|
||||||
* If the connection attempt fails, this function logs an error
|
* 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 *
|
PGconn *
|
||||||
connectToServer(ClusterInfo *cluster, const char *db_name)
|
connectToServer(ClusterInfo *cluster, const char *db_name)
|
||||||
@ -45,7 +45,8 @@ connectToServer(ClusterInfo *cluster, const char *db_name)
|
|||||||
if (conn)
|
if (conn)
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
|
|
||||||
exit_nicely(true);
|
printf("Failure, exiting\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn;
|
return conn;
|
||||||
@ -57,7 +58,7 @@ connectToServer(ClusterInfo *cluster, const char *db_name)
|
|||||||
*
|
*
|
||||||
* Formats a query string from the given arguments and executes the
|
* Formats a query string from the given arguments and executes the
|
||||||
* resulting query. If the query fails, this function logs an error
|
* 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 *
|
PGresult *
|
||||||
executeQueryOrDie(PGconn *conn, const char *fmt,...)
|
executeQueryOrDie(PGconn *conn, const char *fmt,...)
|
||||||
@ -81,8 +82,8 @@ executeQueryOrDie(PGconn *conn, const char *fmt,...)
|
|||||||
PQerrorMessage(conn));
|
PQerrorMessage(conn));
|
||||||
PQclear(result);
|
PQclear(result);
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit_nicely(true);
|
printf("Failure, exiting\n");
|
||||||
return NULL; /* Never get here, but keeps compiler happy */
|
exit(1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return result;
|
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
|
void
|
||||||
start_postmaster(ClusterInfo *cluster, bool quiet)
|
start_postmaster(ClusterInfo *cluster, bool quiet)
|
||||||
{
|
{
|
||||||
@ -159,11 +172,22 @@ start_postmaster(ClusterInfo *cluster, bool quiet)
|
|||||||
const char *bindir;
|
const char *bindir;
|
||||||
const char *datadir;
|
const char *datadir;
|
||||||
unsigned short port;
|
unsigned short port;
|
||||||
|
bool exit_hook_registered = false;
|
||||||
|
|
||||||
bindir = cluster->bindir;
|
bindir = cluster->bindir;
|
||||||
datadir = cluster->pgdata;
|
datadir = cluster->pgdata;
|
||||||
port = cluster->port;
|
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
|
* 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
|
* same file because we get the error: "The process cannot access the file
|
||||||
|
@ -99,7 +99,8 @@ pg_log(eLogType type, char *fmt,...)
|
|||||||
case PG_FATAL:
|
case PG_FATAL:
|
||||||
printf("%s", "\n");
|
printf("%s", "\n");
|
||||||
printf("%s", _(message));
|
printf("%s", _(message));
|
||||||
exit_nicely(true);
|
printf("Failure, exiting\n");
|
||||||
|
exit(1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PG_DEBUG:
|
case PG_DEBUG:
|
||||||
@ -184,36 +185,6 @@ get_user_info(char **user_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
exit_nicely(bool need_cleanup)
|
|
||||||
{
|
|
||||||
stop_postmaster(true, true);
|
|
||||||
|
|
||||||
pg_free(log_opts.filename);
|
|
||||||
|
|
||||||
if (log_opts.fd)
|
|
||||||
fclose(log_opts.fd);
|
|
||||||
|
|
||||||
if (log_opts.debug_fd)
|
|
||||||
fclose(log_opts.debug_fd);
|
|
||||||
|
|
||||||
/* terminate any running instance of postmaster */
|
|
||||||
if (os_info.postmasterPID != 0)
|
|
||||||
kill(os_info.postmasterPID, SIGTERM);
|
|
||||||
|
|
||||||
if (need_cleanup)
|
|
||||||
{
|
|
||||||
printf("Failure, exiting\n");
|
|
||||||
/*
|
|
||||||
* FIXME must delete intermediate files
|
|
||||||
*/
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
pg_malloc(int n)
|
pg_malloc(int n)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user