]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx-avoid-xmit-overflow-panic-20050107
authorDerrick Brashear <shadow@dementia.org>
Fri, 7 Jan 2005 23:08:27 +0000 (23:08 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 7 Jan 2005 23:08:27 +0000 (23:08 +0000)
instead of losing, just send the packets and then make another pass to collect more

src/rx/rx.c

index bcdb837030122ddea26736b7e4be5df51657d3f4..27adda19fc0f8670528f1131b69beca100163bbb 100644 (file)
@@ -5032,6 +5032,9 @@ rxi_Start(struct rxevent *event, register struct rx_call *call,
        if (!(call->flags & RX_CALL_TQ_BUSY)) {
            call->flags |= RX_CALL_TQ_BUSY;
            do {
+#endif /* AFS_GLOBAL_RXLOCK_KERNEL */
+           restart:
+#ifdef AFS_GLOBAL_RXLOCK_KERNEL
                call->flags &= ~RX_CALL_NEED_START;
 #endif /* AFS_GLOBAL_RXLOCK_KERNEL */
                nXmitPackets = 0;
@@ -5085,7 +5088,12 @@ rxi_Start(struct rxevent *event, register struct rx_call *call,
                    /* Transmit the packet if it needs to be sent. */
                    if (!clock_Lt(&now, &p->retryTime)) {
                        if (nXmitPackets == maxXmitPackets) {
-                           osi_Panic("rxi_Start: xmit list overflowed");
+                           rxi_SendXmitList(call, xmitList, nXmitPackets, 
+                                            istack, &now, &retryTime, 
+                                            resending);
+                           osi_Free(xmitList, maxXmitPackets * 
+                                    sizeof(struct rx_packet *));
+                           goto restart;
                        }
                        xmitList[nXmitPackets++] = p;
                    }