git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 600fc1d)
Allow copydir() to be interrupted.
Thu, 1 Jul 2010 20:12:40 +0000 (20:12 +0000)
Thu, 1 Jul 2010 20:12:40 +0000 (20:12 +0000)
This makes ALTER DATABASE .. SET TABLESPACE and CREATE DATABASE more
sensitive to interrupts. Backpatch to 8.4, where ALTER DATABASE .. SET
TABLESPACE was introduced. We could go back further, but in the absence
of complaints about the CREATE DATABASE case it doesn't seem worth it.

Guillaume Lelarge, with a small correction by me.


diff --git a/src/port/copydir.c b/src/port/copydir.c
index 0927e62fe61f23f99364d3d56986a9ccdbcbd58a..b9c6a9a6104519e4a8f89c2fca301944fcc59fab 100644 (file)
--- a/src/port/copydir.c
+++ b/src/port/copydir.c
@@ -11,7 +11,7 @@
* as a service.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/port/copydir.c,v 1.36 2010年03月01日 14:54:00 tgl Exp $
+ * $PostgreSQL: pgsql/src/port/copydir.c,v 1.37 2010年07月01日 20:12:40 rhaas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -23,6 +23,7 @@
#include <sys/stat.h>
#include "storage/fd.h"
+#include "miscadmin.h"
/*
* On Windows, call non-macro versions of palloc; we can't reference
@@ -69,6 +70,9 @@ copydir(char *fromdir, char *todir, bool recurse)
{
struct stat fst;
+ /* If we got a cancel signal during the copy of the directory, quit */
+ CHECK_FOR_INTERRUPTS();
+
if (strcmp(xlde->d_name, ".") == 0 ||
strcmp(xlde->d_name, "..") == 0)
continue;
@@ -172,6 +176,9 @@ copy_file(char *fromfile, char *tofile)
*/
for (offset = 0;; offset += nbytes)
{
+ /* If we got a cancel signal during the copy of the file, quit */
+ CHECK_FOR_INTERRUPTS();
+
nbytes = read(srcfd, buffer, COPY_BUF_SIZE);
if (nbytes < 0)
ereport(ERROR,
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /