free(deadconn->priv);
deadconn->priv = NULL;
faim_mutex_init(&deadconn->active, NULL);
+ faim_mutex_init(&deadconn->seqnum_lock, NULL);
}
struct aim_conn_t *aim_getconn_type(struct aim_session_t *sess,
*/
u_int aim_get_next_txseqnum(struct aim_conn_t *conn)
{
- return ( ++conn->seqnum );
+ u_int ret;
+
+ faim_mutex_lock(&conn->seqnum_lock);
+ ret = ++conn->seqnum;
+ faim_mutex_unlock(&conn->seqnum_lock);
+ return ret;
}
/*
time_t lastactivity; /* time of last transmit */
int forcedlatency;
struct aim_rxcblist_t *handlerlist;
-#ifdef FAIM_USEPTHREADS
- faim_mutex_t active;
-#endif
+ faim_mutex_t active; /* lock around read/writes */
+ faim_mutex_t seqnum_lock; /* lock around ->seqnum changes */
};
/* struct for incoming commands */