]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-rx-lock-leak-20051128
authorJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 29 Nov 2005 07:01:50 +0000 (07:01 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 29 Nov 2005 07:01:50 +0000 (07:01 +0000)
Fix a lock leak introduced when adding thread local packet queues.

(cherry picked from commit ae2f1d3f68266a47d04b62fab577ada30990732c)

src/rx/rx.c

index baefb694c7cd4552288e78aa4325d28ba2926c37..504e9c7aae08a7d7beab108f9a81c3cc590fc424 100644 (file)
@@ -2851,11 +2851,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;
@@ -2877,7 +2881,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 */
        }