diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2010-01-23 21:29:06 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2010-01-23 21:29:06 +0000 |
commit | 18cba6eccbdddd4fd96455db3f9ca738d9d7b777 (patch) | |
tree | d464100429a13ef032276ef74aac25a509f5211b /src/backend/utils/adt/dbsize.c | |
parent | 5f608958ff2f9189c81bc2bde0713aed31507cdf (diff) | |
download | postgresql-18cba6eccbdddd4fd96455db3f9ca738d9d7b777.tar.gz postgresql-18cba6eccbdddd4fd96455db3f9ca738d9d7b777.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.
Diffstat (limited to 'src/backend/utils/adt/dbsize.c')
-rw-r--r-- | src/backend/utils/adt/dbsize.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index 9b97751524b..3a85292f057 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -5,7 +5,7 @@ * Copyright (c) 2002-2009, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.24 2009/06/11 14:49:03 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.24.2.1 2010/01/23 21:29:06 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, ForkNumber forknum) { struct stat fst; + CHECK_FOR_INTERRUPTS(); + if (segcount == 0) snprintf(pathname, MAXPGPATH, "%s", relationpath); |