]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Insert CHECK_FOR_INTERRUPTS calls into loops in dbsize.c, to ensure that
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 23 Jan 2010 21:29:23 +0000 (21:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 23 Jan 2010 21:29:23 +0000 (21:29 +0000)
the various disk-size-reporting functions will respond to query cancel
reasonably promptly even in very large databases.  Per report from
Kevin Grittner.

src/backend/utils/adt/dbsize.c

index 47133f948d0d00a4d9be4ec71295990dfbc89abe..db720069ef37a994b440660305bc152d974a90d9 100644 (file)
@@ -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);