I've not changed any malloc/calloc to palloc. It looks to me that these memory

areas are for the lifetime of the backend and in the interests of not breaking
something that's not broken I left alone.

Note for anyone reading this and wanting it for tsearch-v2-stable (i.e. for 7.3
backend) this patch probably will not apply cleanly to that source. It should
be simple enough to see what's going on and apply the changes by hand if need
be.


--
Nigel J. Andrews
This commit is contained in:
Bruce Momjian 2003-09-29 18:54:38 +00:00
parent 4b4c43b146
commit 6000e32805
3 changed files with 38 additions and 9 deletions

View File

@ -6,39 +6,63 @@ extern struct SN_env *
SN_create_env(int S_size, int I_size, int B_size)
{
struct SN_env *z = (struct SN_env *) calloc(1, sizeof(struct SN_env));
struct SN_env *z2 = z;
if (!z)
return z;
z->p = create_s();
if (S_size)
if (!z->p)
z = NULL;
if (z && S_size)
{
z->S = (symbol * *) calloc(S_size, sizeof(symbol *));
if ((z->S = (symbol * *) calloc(S_size, sizeof(symbol *))))
{
int i;
for (i = 0; i < S_size; i++)
z->S[i] = create_s();
{
if (!(z->S[i] = create_s()))
{
z = NULL;
break;
}
}
z2->S_size = i;
}
z->S_size = S_size;
else
z = NULL;
}
if (I_size)
if (z && I_size)
{
z->I = (int *) calloc(I_size, sizeof(int));
z->I_size = I_size;
if (z->I)
z->I_size = I_size;
else
z = NULL;
}
if (B_size)
if (z && B_size)
{
z->B = (symbol *) calloc(B_size, sizeof(symbol));
z->B_size = B_size;
if (z->B)
z->B_size = B_size;
else
z = NULL;
}
if (!z)
SN_close_env(z2);
return z;
}
extern void
SN_close_env(struct SN_env * z)
{
if (z->S_size)
if (z->S && z->S_size)
{
{
int i;

View File

@ -14,6 +14,8 @@ create_s(void)
{
symbol *p = (symbol *) (HEAD + (char *) malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)));
if (p == (symbol *) (HEAD))
return NULL;
CAPACITY(p) = CREATE_SIZE;
SET_SIZE(p, CREATE_SIZE);
return p;

View File

@ -112,6 +112,9 @@ init_cfg(Oid id, TSCfgInfo * cfg)
cfg->map[lexid].len = ARRNELEMS(a);
cfg->map[lexid].dict_id = (Datum *) malloc(sizeof(Datum) * cfg->map[lexid].len);
if (!cfg->map[lexid].dict_id)
ts_error(ERROR, "No memory");
memset(cfg->map[lexid].dict_id, 0, sizeof(Datum) * cfg->map[lexid].len);
ptr = (text *) ARR_DATA_PTR(a);
oldcontext = MemoryContextSwitchTo(TopMemoryContext);