From df5a99fb1fa4257dd319968abf3ab815e4ce54c8 Mon Sep 17 00:00:00 2001 From: mid Date: Tue, 30 May 2000 21:51:50 +0000 Subject: [PATCH] Locking around tx seqnum. --- aim_conn.c | 1 + aim_txqueue.c | 7 ++++++- faim/aim.h | 5 ++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/aim_conn.c b/aim_conn.c index 0396f88..c520b0c 100644 --- a/aim_conn.c +++ b/aim_conn.c @@ -40,6 +40,7 @@ void aim_conn_close(struct aim_conn_t *deadconn) 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, diff --git a/aim_txqueue.c b/aim_txqueue.c index 8c3a9fb..bdc3b14 100644 --- a/aim_txqueue.c +++ b/aim_txqueue.c @@ -141,7 +141,12 @@ int aim_tx_enqueue__immediate(struct aim_session_t *sess, struct command_tx_stru */ 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; } /* diff --git a/faim/aim.h b/faim/aim.h index c15e646..6257282 100644 --- a/faim/aim.h +++ b/faim/aim.h @@ -133,9 +133,8 @@ struct aim_conn_t { 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 */ -- 2.45.1