Commit 6000e328 authored by Bruce Momjian's avatar Bruce Momjian

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
parent 4b4c43b1
...@@ -6,39 +6,63 @@ extern struct SN_env * ...@@ -6,39 +6,63 @@ extern struct SN_env *
SN_create_env(int S_size, int I_size, int B_size) 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 *z = (struct SN_env *) calloc(1, sizeof(struct SN_env));
struct SN_env *z2 = z;
if (!z)
return z;
z->p = create_s(); 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; int i;
for (i = 0; i < S_size; i++) for (i = 0; i < S_size; i++)
z->S[i] = create_s(); {
if (!(z->S[i] = create_s()))
{
z = NULL;
break;
}
} }
z->S_size = S_size; z2->S_size = i;
}
else
z = NULL;
} }
if (I_size) if (z && I_size)
{ {
z->I = (int *) calloc(I_size, sizeof(int)); z->I = (int *) calloc(I_size, sizeof(int));
if (z->I)
z->I_size = I_size; 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 = (symbol *) calloc(B_size, sizeof(symbol));
if (z->B)
z->B_size = B_size; z->B_size = B_size;
else
z = NULL;
} }
if (!z)
SN_close_env(z2);
return z; return z;
} }
extern void extern void
SN_close_env(struct SN_env * z) SN_close_env(struct SN_env * z)
{ {
if (z->S_size) if (z->S && z->S_size)
{ {
{ {
int i; int i;
......
...@@ -14,6 +14,8 @@ create_s(void) ...@@ -14,6 +14,8 @@ create_s(void)
{ {
symbol *p = (symbol *) (HEAD + (char *) malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol))); symbol *p = (symbol *) (HEAD + (char *) malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)));
if (p == (symbol *) (HEAD))
return NULL;
CAPACITY(p) = CREATE_SIZE; CAPACITY(p) = CREATE_SIZE;
SET_SIZE(p, CREATE_SIZE); SET_SIZE(p, CREATE_SIZE);
return p; return p;
......
...@@ -112,6 +112,9 @@ init_cfg(Oid id, TSCfgInfo * cfg) ...@@ -112,6 +112,9 @@ init_cfg(Oid id, TSCfgInfo * cfg)
cfg->map[lexid].len = ARRNELEMS(a); cfg->map[lexid].len = ARRNELEMS(a);
cfg->map[lexid].dict_id = (Datum *) malloc(sizeof(Datum) * cfg->map[lexid].len); 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); memset(cfg->map[lexid].dict_id, 0, sizeof(Datum) * cfg->map[lexid].len);
ptr = (text *) ARR_DATA_PTR(a); ptr = (text *) ARR_DATA_PTR(a);
oldcontext = MemoryContextSwitchTo(TopMemoryContext); oldcontext = MemoryContextSwitchTo(TopMemoryContext);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment