From 2fbfef7f9157aad571307564faae1ce7aae4e3be Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Thu, 28 Oct 2004 19:08:06 +0000 Subject: [PATCH] drop-h-lock-around-putconn-20041027 the problem with rx_PutConnection is h_FreeConnection uses the host global lock ==================== This delta was composed from multiple commits as part of the CVS->Git migration. The checkin message with each commit was inconsistent. The following are the additional commit messages. ==================== the problem with rx_PutConnection is h_FreeConnection uses the host global lock but it shouldn't matter (callback conn should be a client not server conn and thus not h_FreeConnection on cleanup) further, we should free the conns we GetConnection'd not the ones still in the host struct at the end. --- src/viced/callback.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/viced/callback.c b/src/viced/callback.c index 90d684d72..fc45bb379 100644 --- a/src/viced/callback.c +++ b/src/viced/callback.c @@ -855,11 +855,20 @@ MultiBreakCallBack_r(struct cbstruct cba[], int ncbas, struct host *hp; hp = cba[i].hp; if (hp && xhost != hp) { - rx_PutConnection(hp->callback_rxcon); h_Release_r(hp); } } + /* H_UNLOCK around this so h_FreeConnection does not deadlock. + h_FreeConnection should *never* be called on a callback connection, + but on 10/27/04 a deadlock occurred where it was, when we know why, + this should be reverted. -- shadow */ + H_UNLOCK; + for (i = 0; i < j; i++) { + rx_PutConnection(conns[i]); + } + H_LOCK; + return; } -- 2.39.5