]> andersk Git - libfaim.git/commitdiff
- Tue Aug 8 04:15:47 UTC 2000
authormid <mid>
Tue, 8 Aug 2000 04:22:16 +0000 (04:22 +0000)
committermid <mid>
Tue, 8 Aug 2000 04:22:16 +0000 (04:22 +0000)
   - Fixed double-calling of faim_mutex_init
   - conn->type preserved after aim_conn_close

CHANGES
aim_conn.c
faim/aim.h

diff --git a/CHANGES b/CHANGES
index e54c93825d4dbfd8426552d7b3fed6d22492f4da..f6d3f7848dd1038cd078dd2944b4a1919d44527e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
 
 No release numbers
 ------------------
+ - Tue Aug  8 04:15:47 UTC 2000
+   - Fixed double-calling of faim_mutex_init
+   - conn->type preserved after aim_conn_close
+
  - Mon Jul 17 01:56:31 UTC 2000
    - Added 0004/000c callback (for message acknowledgments)
       - This goes with the AIM_IMFLAGS_ACK option that has been there
index 2e1c35fd57df188d2c84baa57f58b54027084bca..5eb568df0a8f09c0f647d505e844e4a22638f72c 100644 (file)
@@ -55,6 +55,24 @@ 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->type = -1;
+  deadconn->seqnum = 0;
+  deadconn->lastactivity = 0;
+  deadconn->forcedlatency = 0;
+  deadconn->handlerlist = NULL;
+  deadconn->priv = NULL;
+  faim_mutex_init(&deadconn->active, NULL);
+  faim_mutex_init(&deadconn->seqnum_lock, NULL);
+  
+  return;
+}
+
 void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **deadconn)
 {
   struct aim_conn_t *cur;
@@ -83,7 +101,7 @@ void aim_conn_kill(struct aim_session_t *sess, struct aim_conn_t **deadconn)
   /* XXX: do we need this for txqueue too? */
   aim_rxqueue_cleanbyconn(sess, *deadconn);
 
-  aim_conn_close(*deadconn);
+  aim_conn_init(*deadconn);
   free(*deadconn);
   deadconn = NULL;
 
@@ -92,21 +110,23 @@ 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;
+
+  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;
+  typesav = deadconn->type;
   if (deadconn->handlerlist)
     aim_clearhandlers(deadconn);
-  deadconn->handlerlist = NULL;
   if (deadconn->priv)
     free(deadconn->priv);
-  deadconn->priv = NULL;
-  faim_mutex_init(&deadconn->active, NULL);
-  faim_mutex_init(&deadconn->seqnum_lock, NULL);
+  
+  aim_conn_init(deadconn);
+
+  deadconn->type = typesav;
+
+  return;
 }
 
 struct aim_conn_t *aim_getconn_type(struct aim_session_t *sess,
index bbc1d30b1b7f450a8ccbf4abcab8c29f369edb84..6e000c7c420325c2684c1384571c268a92afe866 100644 (file)
@@ -43,6 +43,7 @@
 #define faim_mutex_init pthread_mutex_init
 #define faim_mutex_lock pthread_mutex_lock
 #define faim_mutex_unlock pthread_mutex_unlock
+#define faim_mutex_destroy pthread_mutex_destroy
 #elif defined(FAIM_USEFAKELOCKS)
 /*
  * For platforms without pthreads, we also assume
@@ -55,6 +56,7 @@
 #define faim_mutex_init(x, y) *x = 0
 #define faim_mutex_lock(x) *x = 1;
 #define faim_mutex_unlock(x) *x = 0;
+#define faim_mutex_destroy(x) *x = 0;
 #endif
 
 /* Portability stuff (DMP) */
This page took 0.207998 seconds and 5 git commands to generate.