Insert CHECK_FOR_INTERRUPTS calls into loops in dbsize.c, to ensure that

the various disk-size-reporting functions will respond to query cancel
reasonably promptly even in very large databases.  Per report from
Kevin Grittner.
This commit is contained in:
Tom Lane 2010-01-23 21:29:12 +00:00
parent 317be817f4
commit 61da9c4e25

View File

@ -5,7 +5,7 @@
* Copyright (c) 2002-2008, PostgreSQL Global Development Group
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.16.2.1 2008/03/31 01:32:01 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.16.2.2 2010/01/23 21:29:12 tgl Exp $
*
*/
@ -46,6 +46,8 @@ db_dir_size(const char *path)
{
struct stat fst;
CHECK_FOR_INTERRUPTS();
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
@ -104,6 +106,8 @@ calculate_database_size(Oid dbOid)
while ((direntry = ReadDir(dirdesc, dirpath)) != NULL)
{
CHECK_FOR_INTERRUPTS();
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
@ -193,6 +197,8 @@ calculate_tablespace_size(Oid tblspcOid)
{
struct stat fst;
CHECK_FOR_INTERRUPTS();
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
@ -261,6 +267,8 @@ calculate_relation_size(RelFileNode *rfn)
{
struct stat fst;
CHECK_FOR_INTERRUPTS();
if (segcount == 0)
snprintf(pathname, MAXPGPATH, "%s",
relationpath);