Fix 6.X vacuum bug in shrinking code.
authorVadim B. Mikheev
Wed, 25 Feb 1998 23:40:32 +0000 (23:40 +0000)
committerVadim B. Mikheev
Wed, 25 Feb 1998 23:40:32 +0000 (23:40 +0000)
src/backend/commands/vacuum.c

index f586158570ec40471b9c636cef7d3653ac6239e4..47d5d2fb47a9cc51d60157fe6773d68fca65d62c 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.61 1998/02/03 21:57:27 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.62 1998/02/25 23:40:32 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1083,23 +1083,19 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
                    /*
                     * If no one tuple can't be added to this page -
                     * remove page from Fvpl. - vadim 11/27/96
+                    *
+                    * But we can't remove last page - this is our
+                    * "show-stopper" !!!   - vadim 02/25/98
                     */
-                   if (!vc_enough_space(ToVpd, vacrelstats->min_tlen))
+                   if (ToVpd != Fvplast && 
+                       !vc_enough_space(ToVpd, vacrelstats->min_tlen))
                    {
-                       if (ToVpd != Fvplast)
-                       {
-                           Assert(Fnpages > ToVpI + 1);
-                           memmove(Fvpl->vpl_pgdesc + ToVpI,
-                                   Fvpl->vpl_pgdesc + ToVpI + 1,
-                           sizeof(VPageDescr *) * (Fnpages - ToVpI - 1));
-                       }
-                       Assert(Fnpages >= 1);
+                       Assert(Fnpages > ToVpI + 1);
+                       memmove(Fvpl->vpl_pgdesc + ToVpI,
+                               Fvpl->vpl_pgdesc + ToVpI + 1,
+                               sizeof(VPageDescr *) * (Fnpages - ToVpI - 1));
                        Fnpages--;
-                       if (Fnpages == 0)
-                           break;
-                       /* get prev reapped page from Fvpl */
-                       Fvplast = Fvpl->vpl_pgdesc[Fnpages - 1];
-                       Fblklast = Fvplast->vpd_blkno;
+                       Assert (Fvplast == Fvpl->vpl_pgdesc[Fnpages - 1]);
                    }
                }
                for (i = 0; i < Fnpages; i++)