]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix recovery cache code (thanks to Peter Eisentraut for
authorVadim B. Mikheev <vadim4o@yahoo.com>
Tue, 31 Oct 2000 23:56:36 +0000 (23:56 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Tue, 31 Oct 2000 23:56:36 +0000 (23:56 +0000)
pointing to bug).

src/backend/access/transam/xlogutils.c

index 3d15033b940298607fefcc7450cbddebf03a6c8c..1fdc7e83fb5e3ab0bb6dd1633d29e25aecee135d 100644 (file)
@@ -238,15 +238,14 @@ static XLogRelDesc                   *_xlrelarr = NULL;
 static Form_pg_class           _xlpgcarr = NULL;
 static int                                     _xlast = 0;
 static int                                     _xlcnt = 0;
-#define        _XLOG_INITRELCACHESIZE  32
-#define        _XLOG_MAXRELCACHESIZE   512
+#define        _XLOG_RELCACHESIZE      512
 
 static void
 _xl_init_rel_cache(void)
 {
        HASHCTL                 ctl;
 
-       _xlcnt = _XLOG_INITRELCACHESIZE;
+       _xlcnt = _XLOG_RELCACHESIZE;
        _xlast = 0;
        _xlrelarr = (XLogRelDesc*) malloc(sizeof(XLogRelDesc) * _xlcnt);
        memset(_xlrelarr, 0, sizeof(XLogRelDesc) * _xlcnt);
@@ -261,7 +260,7 @@ _xl_init_rel_cache(void)
        ctl.datasize = sizeof(XLogRelDesc*);
        ctl.hash = tag_hash;
 
-       _xlrelcache = hash_create(_XLOG_INITRELCACHESIZE, &ctl,
+       _xlrelcache = hash_create(_XLOG_RELCACHESIZE, &ctl,
                                                                HASH_ELEM | HASH_FUNCTION);
 }
 
@@ -297,6 +296,8 @@ _xl_remove_hash_entry(XLogRelDesc **edata, int dummy)
 static XLogRelDesc*
 _xl_new_reldesc(void)
 {
+       XLogRelDesc        *res;
+
        _xlast++;
        if (_xlast < _xlcnt)
        {
@@ -304,27 +305,13 @@ _xl_new_reldesc(void)
                return(&(_xlrelarr[_xlast]));
        }
 
-       if ( 2 * _xlcnt <= _XLOG_MAXRELCACHESIZE)
-       {
-               _xlrelarr = (XLogRelDesc*) realloc(_xlrelarr, 
-                                               2 * sizeof(XLogRelDesc) * _xlcnt);
-               memset(&(_xlrelarr[_xlcnt]), 0, sizeof(XLogRelDesc) * _xlcnt);
-               _xlpgcarr = (Form_pg_class) realloc(_xlpgcarr, 
-                                               2 * sizeof(FormData_pg_class) * _xlcnt);
-               memset(&(_xlpgcarr[_xlcnt]), 0, sizeof(FormData_pg_class) * _xlcnt);
-               _xlcnt += _xlcnt;
-               _xlrelarr[_xlast].reldata.rd_rel = &(_xlpgcarr[_xlast]);
-               return(&(_xlrelarr[_xlast]));
-       }
-       else /* reuse */
-       {
-               XLogRelDesc        *res = _xlrelarr[0].moreRecently;
+       /* reuse */
+       res = _xlrelarr[0].moreRecently;
 
-               _xl_remove_hash_entry(&res, 0);
+       _xl_remove_hash_entry(&res, 0);
 
-               _xlast--;
-               return(res);
-       }
+       _xlast--;
+       return(res);
 }
 
 extern void CreateDummyCaches(void);