naresh@touch.com (Naresh Kumar) (04/11/90)
Quipu DSA (ISODE Release 6.0) loses some memory with every "bind".
In function conn_pre_init(), the parameters of the first indication
received through TNetAccept are saved.
quipu/conn_init.c conn_pre_init() 572-579
if (vec[0])
cn->cn_init_act.ia_vec[0] = strdup (vec[0]);
if (vec[1])
cn->cn_init_act.ia_vec[1] = strdup (vec[1]);
if (vec[2])
cn->cn_init_act.ia_vec[2] = strdup (vec[2]);
if (vec[3])
cn->cn_init_act.ia_vec[3] = strdup (vec[3]);
At the time of releasing the connection, memory allocated through strdup()
is released as under :
quipu/conn.c conn_free 53-60
if (conn->cn_init_act.ia_vec[0])
free (conn->cn_init_act.ia_vec[0]);
if (conn->cn_init_act.ia_vec[1])
free (conn->cn_init_act.ia_vec[1]);
if (conn->cn_init_act.ia_vec[2])
free (conn->cn_init_act.ia_vec[2]);
if (conn->cn_init_act.ia_vec[3])
free (conn->cn_init_act.ia_vec[3]);
But vec[1] has been initialized to NULL in TInit () which is called through
AcInit and the memory allocated for this element is never released.
tsap/tsaprespond.c, TInit() 114
*vec = NULL;
I think the above statement should be deleted to fix this problem.