Skip to content

Commit 3706f08

Browse files
committed
Fix recovery cache code (thanks to Peter Eisentraut for
pointing to bug).
1 parent b99ee7f commit 3706f08

File tree

1 file changed

+10
-23
lines changed

1 file changed

+10
-23
lines changed

src/backend/access/transam/xlogutils.c

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -238,15 +238,14 @@ static XLogRelDesc *_xlrelarr = NULL;
238238
static Form_pg_class _xlpgcarr = NULL;
239239
static int _xlast = 0;
240240
static int _xlcnt = 0;
241-
#define _XLOG_INITRELCACHESIZE 32
242-
#define _XLOG_MAXRELCACHESIZE 512
241+
#define _XLOG_RELCACHESIZE 512
243242

244243
static void
245244
_xl_init_rel_cache(void)
246245
{
247246
HASHCTL ctl;
248247

249-
_xlcnt = _XLOG_INITRELCACHESIZE;
248+
_xlcnt = _XLOG_RELCACHESIZE;
250249
_xlast = 0;
251250
_xlrelarr = (XLogRelDesc*) malloc(sizeof(XLogRelDesc) * _xlcnt);
252251
memset(_xlrelarr, 0, sizeof(XLogRelDesc) * _xlcnt);
@@ -261,7 +260,7 @@ _xl_init_rel_cache(void)
261260
ctl.datasize = sizeof(XLogRelDesc*);
262261
ctl.hash = tag_hash;
263262

264-
_xlrelcache = hash_create(_XLOG_INITRELCACHESIZE, &ctl,
263+
_xlrelcache = hash_create(_XLOG_RELCACHESIZE, &ctl,
265264
HASH_ELEM | HASH_FUNCTION);
266265
}
267266

@@ -297,34 +296,22 @@ _xl_remove_hash_entry(XLogRelDesc **edata, int dummy)
297296
static XLogRelDesc*
298297
_xl_new_reldesc(void)
299298
{
299+
XLogRelDesc *res;
300+
300301
_xlast++;
301302
if (_xlast < _xlcnt)
302303
{
303304
_xlrelarr[_xlast].reldata.rd_rel = &(_xlpgcarr[_xlast]);
304305
return(&(_xlrelarr[_xlast]));
305306
}
306307

307-
if ( 2 * _xlcnt <= _XLOG_MAXRELCACHESIZE)
308-
{
309-
_xlrelarr = (XLogRelDesc*) realloc(_xlrelarr,
310-
2 * sizeof(XLogRelDesc) * _xlcnt);
311-
memset(&(_xlrelarr[_xlcnt]), 0, sizeof(XLogRelDesc) * _xlcnt);
312-
_xlpgcarr = (Form_pg_class) realloc(_xlpgcarr,
313-
2 * sizeof(FormData_pg_class) * _xlcnt);
314-
memset(&(_xlpgcarr[_xlcnt]), 0, sizeof(FormData_pg_class) * _xlcnt);
315-
_xlcnt += _xlcnt;
316-
_xlrelarr[_xlast].reldata.rd_rel = &(_xlpgcarr[_xlast]);
317-
return(&(_xlrelarr[_xlast]));
318-
}
319-
else /* reuse */
320-
{
321-
XLogRelDesc *res = _xlrelarr[0].moreRecently;
308+
/* reuse */
309+
res = _xlrelarr[0].moreRecently;
322310

323-
_xl_remove_hash_entry(&res, 0);
311+
_xl_remove_hash_entry(&res, 0);
324312

325-
_xlast--;
326-
return(res);
327-
}
313+
_xlast--;
314+
return(res);
328315
}
329316

330317
extern void CreateDummyCaches(void);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy