]> granicus.if.org Git - postgresql/commitdiff
Change fd.c so that temp files are closed and deleted at
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Oct 1999 23:09:02 +0000 (23:09 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 17 Oct 1999 23:09:02 +0000 (23:09 +0000)
proc_exit time.  I discovered that if the frontend closes the connection
when you're inside a transaction block, there is nothing ensuring that
temp files go away ... I wonder whether proc_exit ought to try to do an
explicit transaction abort?

src/backend/storage/file/fd.c

index 2fce82ecfd6aaaff658ffd89392fdcaaa9af3234..8dc82844d5ec5a62fc3b37a36ac56767e91bc62b 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.49 1999/10/13 15:02:29 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/file/fd.c,v 1.50 1999/10/17 23:09:02 tgl Exp $
  *
  * NOTES:
  *
@@ -48,6 +48,7 @@
 #include "postgres.h"
 #include "miscadmin.h"
 #include "storage/fd.h"
+#include "storage/ipc.h"
 
 /*
  * Problem: Postgres does a system(ld...) to do dynamic loading.
@@ -442,6 +443,9 @@ AllocateVfd()
                VfdCache->fd = VFD_CLOSED;
 
                SizeVfdCache = 1;
+
+               /* register proc-exit call to ensure temp files are dropped at exit */
+               on_proc_exit(AtEOXact_Files, NULL);
        }
 
        if (VfdCache[0].nextFree == 0)
@@ -985,10 +989,10 @@ closeAllVfds()
 /*
  * AtEOXact_Files
  *
- * This routine is called during transaction commit or abort (it doesn't
- * particularly care which).  All still-open temporary-file VFDs are closed,
- * which also causes the underlying files to be deleted.  Furthermore,
- * all "allocated" stdio files are closed.
+ * This routine is called during transaction commit or abort or backend
+ * exit (it doesn't particularly care which).  All still-open temporary-file
+ * VFDs are closed, which also causes the underlying files to be deleted.
+ * Furthermore, all "allocated" stdio files are closed.
  */
 void
 AtEOXact_Files(void)