aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-01-23 21:29:23 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-01-23 21:29:23 +0000
commit8ecbda7707baf8b75c8fbfbea564270bf27c8bd6 (patch)
treed7ecf68e8bd95c30fddbeb25030dfd154b397765
parentae76ee9af95335ee201b184b69beb78e8c8856c5 (diff)
downloadpostgresql-8ecbda7707baf8b75c8fbfbea564270bf27c8bd6.tar.gz
postgresql-8ecbda7707baf8b75c8fbfbea564270bf27c8bd6.zip
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.
-rw-r--r--src/backend/utils/adt/dbsize.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c
index 47133f948d0..db720069ef3 100644
--- a/src/backend/utils/adt/dbsize.c
+++ b/src/backend/utils/adt/dbsize.c
@@ -5,7 +5,7 @@
* Copyright (c) 2002-2005, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.7.2.2 2008/03/31 01:32:48 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.7.2.3 2010/01/23 21:29:23 tgl Exp $
*
*/
@@ -44,6 +44,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;
@@ -95,6 +97,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;
@@ -170,6 +174,8 @@ calculate_tablespace_size(Oid tblspcOid)
{
struct stat fst;
+ CHECK_FOR_INTERRUPTS();
+
if (strcmp(direntry->d_name, ".") == 0 ||
strcmp(direntry->d_name, "..") == 0)
continue;
@@ -246,6 +252,8 @@ calculate_relation_size(RelFileNode *rfn)
{
struct stat fst;
+ CHECK_FOR_INTERRUPTS();
+
if (segcount == 0)
snprintf(pathname, MAXPGPATH, "%s/%u",
dirpath, rfn->relNode);