mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Adjust basebackup.c to suppress compiler warnings.
Some versions of gcc complain about "variable `tablespaces' might be clobbered by `longjmp' or `vfork'" with the original coding. Fix by moving the PG_TRY block into a separate subroutine.
This commit is contained in:
parent
9d1ac2f5fa
commit
e6dce4e439
@ -49,7 +49,7 @@ typedef struct
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called when ERROR or FATAL happens in SendBaseBackup() after
|
* Called when ERROR or FATAL happens in perform_base_backup() after
|
||||||
* we have started the backup - make sure we end it!
|
* we have started the backup - make sure we end it!
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@ -58,6 +58,37 @@ base_backup_cleanup(int code, Datum arg)
|
|||||||
do_pg_abort_backup();
|
do_pg_abort_backup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually do a base backup for the specified tablespaces.
|
||||||
|
*
|
||||||
|
* This is split out mainly to avoid complaints about "variable might be
|
||||||
|
* clobbered by longjmp" from stupider versions of gcc.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
perform_base_backup(const char *backup_label, List *tablespaces)
|
||||||
|
{
|
||||||
|
do_pg_start_backup(backup_label, true);
|
||||||
|
|
||||||
|
PG_ENSURE_ERROR_CLEANUP(base_backup_cleanup, (Datum) 0);
|
||||||
|
{
|
||||||
|
ListCell *lc;
|
||||||
|
|
||||||
|
/* Send tablespace header */
|
||||||
|
SendBackupHeader(tablespaces);
|
||||||
|
|
||||||
|
/* Send off our tablespaces one by one */
|
||||||
|
foreach(lc, tablespaces)
|
||||||
|
{
|
||||||
|
tablespaceinfo *ti = (tablespaceinfo *) lfirst(lc);
|
||||||
|
|
||||||
|
SendBackupDirectory(ti->path, ti->oid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PG_END_ENSURE_ERROR_CLEANUP(base_backup_cleanup, (Datum) 0);
|
||||||
|
|
||||||
|
do_pg_stop_backup();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SendBaseBackup() - send a complete base backup.
|
* SendBaseBackup() - send a complete base backup.
|
||||||
*
|
*
|
||||||
@ -145,26 +176,7 @@ SendBaseBackup(const char *options)
|
|||||||
}
|
}
|
||||||
FreeDir(dir);
|
FreeDir(dir);
|
||||||
|
|
||||||
do_pg_start_backup(backup_label, true);
|
perform_base_backup(backup_label, tablespaces);
|
||||||
|
|
||||||
PG_ENSURE_ERROR_CLEANUP(base_backup_cleanup, (Datum) 0);
|
|
||||||
{
|
|
||||||
ListCell *lc;
|
|
||||||
|
|
||||||
/* Send tablespace header */
|
|
||||||
SendBackupHeader(tablespaces);
|
|
||||||
|
|
||||||
/* Send off our tablespaces one by one */
|
|
||||||
foreach(lc, tablespaces)
|
|
||||||
{
|
|
||||||
ti = (tablespaceinfo *) lfirst(lc);
|
|
||||||
|
|
||||||
SendBackupDirectory(ti->path, ti->oid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PG_END_ENSURE_ERROR_CLEANUP(base_backup_cleanup, (Datum) 0);
|
|
||||||
|
|
||||||
do_pg_stop_backup();
|
|
||||||
|
|
||||||
MemoryContextSwitchTo(old_context);
|
MemoryContextSwitchTo(old_context);
|
||||||
MemoryContextDelete(backup_context);
|
MemoryContextDelete(backup_context);
|
||||||
|
Loading…
Reference in New Issue
Block a user