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
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;
/* 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;
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,
#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
#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) */