GIN index build's allocatedMemory counter needs to be long, not uint32.
authorTom Lane <[email protected]>
Fri, 16 Nov 2007 21:50:13 +0000 (21:50 +0000)
committerTom Lane <[email protected]>
Fri, 16 Nov 2007 21:50:13 +0000 (21:50 +0000)
Else, in a 64-bit machine with maintenance_work_mem set to above 4Gb,
the counter overflows and we never recognize having reached the
maintenance_work_mem limit.  I believe this explains out-of-memory
failure recently reported by Sean Davis.

This is a bug, so backpatch to 8.2.

src/include/access/gin.h

index c37b3672781772d62b79fbe65f46fd2d7766815d..dfd955627843b8a96978842772ecc94ccc6700e2 100644 (file)
@@ -3,7 +3,7 @@
  *   header file for postgres inverted index access method implementation.
  *
  * Copyright (c) 2006, PostgreSQL Global Development Group
- * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.9 2006/10/05 17:57:40 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.9.2.1 2007/11/16 21:50:13 tgl Exp $
  *--------------------------------------------------------------------------
  */
 
@@ -450,7 +450,7 @@ typedef struct
    uint32      maxdepth;
    EntryAccumulator **stack;
    uint32      stackpos;
-   uint32      allocatedMemory;
+   long        allocatedMemory;
 
    uint32      length;
    EntryAccumulator *entryallocator;