Index: src/icqd-threads.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/icqd-threads.cpp,v
retrieving revision 1.22
diff -u -b -p -r1.22 icqd-threads.cpp
--- src/icqd-threads.cpp	18 Jan 2003 01:29:32 -0000	1.22
+++ src/icqd-threads.cpp	23 Jan 2003 20:03:10 -0000
@@ -46,7 +46,7 @@ void *ProcessRunningEvent_Server_tep(voi
 
   static unsigned short nNext = 0;
   static pthread_mutex_t send_mutex = PTHREAD_MUTEX_INITIALIZER;
-
+  static pthread_mutex_t chooser_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
   /* want to be cancelled immediately so we don't try to derefrence the event
@@ -60,6 +60,7 @@ void *ProcessRunningEvent_Server_tep(voi
   if (!d) pthread_exit(NULL);
 
   // Must send packets in sequential order
+  pthread_mutex_lock(&chooser_mutex);
   pthread_mutex_lock(&d->mutex_sendqueue_server);
 
   list<ICQEvent *>::iterator iter;
@@ -106,7 +107,10 @@ void *ProcessRunningEvent_Server_tep(voi
   e->thread_send = pthread_self();
   e->thread_running = true;
 
+  pthread_mutex_unlock(&d->mutex_sendqueue_server);
+
   pthread_mutex_lock(&send_mutex);
+  pthread_mutex_unlock(&chooser_mutex);
 
   // declared here because pthread_cleanup_push starts a new block
   CBuffer *buf;
@@ -115,7 +119,6 @@ void *ProcessRunningEvent_Server_tep(voi
 
   pthread_cleanup_push(cleanup_mutex, &send_mutex);
 
-    pthread_mutex_unlock(&d->mutex_sendqueue_server);
     pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
     pthread_testcancel();
 
