postgres.git / summary / log / commit / refs

commit    8ecbda7707baf8b75c8fbfbea564270bf27c8bd6
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sat Jan 23 21:29:23 2010 +0000
First released in: 9.0.0, 8.1.20, 8.2.16, 8.3.10, 8.4.3

    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.


src/backend/utils/adt/dbsize.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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); [parent: ae76ee9af953]