]> granicus.if.org Git - postgresql/commitdiff
Revert ill-fated patch to release exclusive lock early after vacuum
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Sep 2007 21:43:27 +0000 (21:43 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Sep 2007 21:43:27 +0000 (21:43 +0000)
truncates a table.  Introduces race condition, as shown by buildfarm
failures.

src/backend/commands/vacuumlazy.c

index b9050719cb40076c1d7fddae3ad74561f2ff4e48..564ab8d9fddd4dbd20b3fd0ee027fcc5a3c7725e 100644 (file)
@@ -36,7 +36,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.97 2007/09/20 17:56:31 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/vacuumlazy.c,v 1.98 2007/09/20 21:43:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -855,8 +855,13 @@ lazy_truncate_heap(Relation onerel, LVRelStats *vacrelstats)
         */
        RelationTruncate(onerel, new_rel_pages);
 
-       /* Now we're OK to release the lock. */
-       UnlockRelation(onerel, AccessExclusiveLock);
+       /*
+        * Note: once we have truncated, we *must* keep the exclusive lock
+        * until commit.  The sinval message that will be sent at commit
+        * (as a result of vac_update_relstats()) must be received by other
+        * backends, to cause them to reset their rd_targblock values, before
+        * they can safely access the table again.
+        */
 
        /*
         * Drop free-space info for removed blocks; these must not get entered