*/
void aim_connrst(struct aim_session_t *sess)
{
- faim_mutex_init(&sess->connlistlock, NULL);
+ faim_mutex_init(&sess->connlistlock);
if (sess->connlist) {
struct aim_conn_t *cur = sess->connlist, *tmp;
return newconn;
}
+static void aim_conn_init(struct aim_conn_t *deadconn)
+{
+ if (!deadconn)
+ return;
+
+ deadconn->fd = -1;
+ deadconn->subtype = -1;
+ deadconn->type = -1;
+ deadconn->seqnum = 0;
+ deadconn->lastactivity = 0;
+ deadconn->forcedlatency = 0;
+ deadconn->handlerlist = NULL;
+ deadconn->priv = NULL;
+ faim_mutex_init(&deadconn->active);
+ faim_mutex_init(&deadconn->seqnum_lock);
+
+ return;
+}
+
void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **deadconn)
{
struct aim_conn_t *cur;
aim_rxqueue_cleanbyconn(sess, *deadconn);
aim_conn_close(*deadconn);
+ if ((*deadconn)->priv)
+ free((*deadconn)->priv);
free(*deadconn);
deadconn = NULL;
void aim_conn_close(struct aim_conn_t *deadconn)
{
+ int typesav = -1, subtypesav = -1;
+ void *privsav = NULL;
+
+ faim_mutex_destroy(&deadconn->active);
+ faim_mutex_destroy(&deadconn->seqnum_lock);
if (deadconn->fd >= 3)
close(deadconn->fd);
- deadconn->fd = -1;
- deadconn->type = -1;
- deadconn->seqnum = 0;
- deadconn->lastactivity = 0;
- deadconn->forcedlatency = 0;
if (deadconn->handlerlist)
aim_clearhandlers(deadconn);
- deadconn->handlerlist = NULL;
- if (deadconn->priv)
+
+ typesav = deadconn->type;
+ subtypesav = deadconn->subtype;
+
+ if (deadconn->priv && (deadconn->type != AIM_CONN_TYPE_RENDEZVOUS)) {
free(deadconn->priv);
- deadconn->priv = NULL;
- faim_mutex_init(&deadconn->active, NULL);
- faim_mutex_init(&deadconn->seqnum_lock, NULL);
+ deadconn->priv = NULL;
+ }
+ privsav = deadconn->priv;
+
+ aim_conn_init(deadconn);
+
+ deadconn->type = typesav;
+ deadconn->subtype = subtypesav;
+ deadconn->priv = privsav;
+
+ return;
}
struct aim_conn_t *aim_getconn_type(struct aim_session_t *sess,
sess->queue_outgoing = NULL;
sess->queue_incoming = NULL;
sess->pendingjoin = NULL;
- sess->outstanding_snacs = NULL;
+ aim_initsnachash(sess);
sess->snac_nextid = 0x00000001;
/*