GIN index build's allocatedMemory counter needs to be long, not uint32.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 16 Nov 2007 21:50:06 +0000 (21:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 16 Nov 2007 21:50:06 +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 a6bdf1a6e6a77a1dee52321cd7f6b6970bfdf234..fdc0c0a8e47df1408ffa1a889cb8ff2b7ddf92d1 100644 (file)
@@ -4,7 +4,7 @@
  *
  *     Copyright (c) 2006-2007, PostgreSQL Global Development Group
  *
- *     $PostgreSQL: pgsql/src/include/access/gin.h,v 1.14 2007/11/15 21:14:42 momjian Exp $
+ *     $PostgreSQL: pgsql/src/include/access/gin.h,v 1.15 2007/11/16 21:50:06 tgl Exp $
  *--------------------------------------------------------------------------
  */
 
@@ -453,7 +453,7 @@ typedef struct
        uint32          maxdepth;
        EntryAccumulator **stack;
        uint32          stackpos;
-       uint32          allocatedMemory;
+       long            allocatedMemory;
 
        uint32          length;
        EntryAccumulator *entryallocator;