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.