]> andersk Git - libfaim.git/blobdiff - aim_conn.c
Small fixes.
[libfaim.git] / aim_conn.c
index 2e1c35fd57df188d2c84baa57f58b54027084bca..7caef93665d9f893aa9f591e08d46a1999020c53 100644 (file)
@@ -13,7 +13,7 @@
  */
 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;
 
@@ -55,6 +55,25 @@ struct aim_conn_t *aim_conn_getnext(struct aim_session_t *sess)
   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;
@@ -84,6 +103,8 @@ void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **deadconn)
   aim_rxqueue_cleanbyconn(sess, *deadconn);
 
   aim_conn_close(*deadconn);
+  if ((*deadconn)->priv)
+    free((*deadconn)->priv);
   free(*deadconn);
   deadconn = NULL;
 
@@ -92,21 +113,32 @@ void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **deadconn)
 
 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,
@@ -341,7 +373,7 @@ void aim_session_init(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;
 
   /*
This page took 0.038045 seconds and 4 git commands to generate.