diff --git a/src/rx/rx.c b/src/rx/rx.c index b6a13168fa..bb49d60d0c 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -3803,8 +3803,9 @@ rxi_ReceiveDataPacket(struct rx_call *call, call->rprev = np->header.serial; rxi_calltrace(RX_TRACE_DROP, call); dpf(("packet %"AFS_PTR_FMT" dropped on receipt - quota problems\n", np)); - if (rxi_doreclaim) - rxi_ClearReceiveQueue(call); + /* We used to clear the receive queue here, in an attempt to free + * packets. However this is unsafe if the queue has received a + * soft ACK for the final packet */ clock_GetTime(&now); when = now; clock_Add(&when, &rx_softAckDelay); diff --git a/src/rx/rx_globals.h b/src/rx/rx_globals.h index 3e17c7cb8c..1e51890d00 100644 --- a/src/rx/rx_globals.h +++ b/src/rx/rx_globals.h @@ -481,7 +481,6 @@ EXT osi_socket rx_minSocketNumber GLOBALSINIT(0x7fffffff); #define RX_MAX_QUOTA 15 /* part of min packet computation */ EXT int rx_packetQuota[RX_N_PACKET_CLASSES] GLOBALSINIT(RX_PACKET_QUOTAS); EXT int meltdown_1pkt GLOBALSINIT(1); /* prefer to schedule single-packet calls */ -EXT int rxi_doreclaim GLOBALSINIT(1); /* if discard one packet, discard all */ EXT int rxi_md2cnt GLOBALSINIT(0); /* counter of skipped calls */ EXT int rxi_2dchoice GLOBALSINIT(1); /* keep track of another call to schedule */