From: Michal Sojka Date: Tue, 26 May 2009 16:26:27 +0000 (+0200) Subject: Added mutex to protect request send from multiple threads X-Git-Url: https://rtime.felk.cvut.cz/gitweb/frescor/forb.git/commitdiff_plain/7619572ed1cc6221e7223d50b40e50992e130f7b?hp=c2f03ae3469ac816db6d1ce53636b7791f942edf Added mutex to protect request send from multiple threads On TCP, requests sent from multiple threads could be theoretically intermixed. --- diff --git a/src/peer.c b/src/peer.c index 63c97f7..ea04c0c 100644 --- a/src/peer.c +++ b/src/peer.c @@ -79,6 +79,7 @@ forb_peer_new(void) memset(peer, 0, sizeof(*peer)); fosa_cond_init(&peer->cond); forb_ref_init(&peer->ref); + fosa_mutex_init(&peer->send_lock, 0); } return peer; } diff --git a/src/peer.h b/src/peer.h index 540f6af..57e06f5 100644 --- a/src/peer.h +++ b/src/peer.h @@ -62,7 +62,7 @@ #include "refcnt.h" #include #include - +#include /** * State of a peer. * @@ -91,6 +91,7 @@ typedef struct forb_peer { forb_ref_t ref; /**< Reference count */ enum forb_peer_state state; fosa_cond_t cond; /**< Condition variable for waiting after the peer is discovered. Used together with forb_t::peer_mutex. */ + fosa_mutex_t send_lock; } forb_peer_t; diff --git a/src/request.c b/src/request.c index 08a8c2e..53de5e2 100644 --- a/src/request.c +++ b/src/request.c @@ -217,7 +217,9 @@ forb_request_send(forb_request_t *req, CORBA_Environment *env) } len = FORB_CDR_data_size(&req->cdr_request); + fosa_mutex_lock(&peer->send_lock); size = forb_proto_send(peer, &req->cdr_request); + fosa_mutex_unlock(&peer->send_lock); if (size <= 0 || size != len) { env->major = FORB_EX_COMM_FAILURE; /* Request is deleted when the stub calls forb_request_destroy() */