diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2009-12-03 11:03:29 +0000 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2009-12-03 11:03:29 +0000 |
commit | ab3148b7128e1fe67d8badc9327fd958d2a14c90 (patch) | |
tree | 61e91e6cdedb6be7878b386b6a8da4ceef74b507 /src/include | |
parent | dc588058a033ee9a6f9f84f30cef13b2aafee0bc (diff) |
Fix bug in temporary file management with subtransactions. A cursor opened
in a subtransaction stays open even if the subtransaction is aborted, so
any temporary files related to it must stay alive as well. With the patch,
we use ResourceOwners to track open temporary files and don't automatically
close them at subtransaction end (though in the normal case temporary files
are registered with the subtransaction resource owner and will therefore be
closed).
At end of top transaction, we still check that there's no temporary files
marked as close-at-end-of-transaction open, but that's now just a debugging
cross-check as the resource owner cleanup should've closed them already.
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/utils/resowner.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/include/utils/resowner.h b/src/include/utils/resowner.h index 4725d05687d..67b949cd757 100644 --- a/src/include/utils/resowner.h +++ b/src/include/utils/resowner.h @@ -12,7 +12,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/resowner.h,v 1.17 2009/01/01 17:24:02 momjian Exp $ + * $PostgreSQL: pgsql/src/include/utils/resowner.h,v 1.18 2009/12/03 11:03:29 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -20,6 +20,7 @@ #define RESOWNER_H #include "storage/buf.h" +#include "storage/fd.h" #include "utils/catcache.h" #include "utils/plancache.h" #include "utils/snapshot.h" @@ -129,4 +130,11 @@ extern void ResourceOwnerRememberSnapshot(ResourceOwner owner, extern void ResourceOwnerForgetSnapshot(ResourceOwner owner, Snapshot snapshot); +/* support for temporary file management */ +extern void ResourceOwnerEnlargeFiles(ResourceOwner owner); +extern void ResourceOwnerRememberFile(ResourceOwner owner, + File file); +extern void ResourceOwnerForgetFile(ResourceOwner owner, + File file); + #endif /* RESOWNER_H */ |