From: Jeffrey Altman Date: Tue, 29 Nov 2005 07:00:19 +0000 (+0000) Subject: rx-lock-leak-20051128 X-Git-Tag: openafs-devel-1_5_0~183 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=ae2f1d3f68266a47d04b62fab577ada30990732c;p=packages%2Fo%2Fopenafs.git rx-lock-leak-20051128 Fix a lock leak introduced when adding thread local packet queues. --- diff --git a/src/rx/rx.c b/src/rx/rx.c index b8fdec8d1..a324150c8 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -2855,11 +2855,15 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket, np = rxi_ReceiveAckPacket(call, np, 1); break; case RX_PACKET_TYPE_ABORT: - /* An abort packet: reset the connection, passing the error up to - * the user */ + /* An abort packet: reset the call, passing the error up to the user. */ /* What if error is zero? */ + /* What if the error is -1? the application will treat it as a timeout. */ rxi_CallError(call, ntohl(*(afs_int32 *) rx_DataOf(np))); - break; + MUTEX_EXIT(&call->lock); + MUTEX_ENTER(&conn->conn_data_lock); + conn->refCount--; + MUTEX_EXIT(&conn->conn_data_lock); + return np; /* xmitting; drop packet */ case RX_PACKET_TYPE_BUSY: /* XXXX */ break; @@ -2881,7 +2885,10 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket, rxi_SetAcksInTransmitQueue(call); break; #else /* RX_ENABLE_LOCKS */ + MUTEX_EXIT(&call->lock); + MUTEX_ENTER(&conn->conn_data_lock); conn->refCount--; + MUTEX_EXIT(&conn->conn_data_lock); return np; /* xmitting; drop packet */ #endif /* RX_ENABLE_LOCKS */ }