diff --git a/src/rx/rx_rdwr.c b/src/rx/rx_rdwr.c index a5700e90ac..5baff8adff 100644 --- a/src/rx/rx_rdwr.c +++ b/src/rx/rx_rdwr.c @@ -325,6 +325,16 @@ rx_ReadProc(struct rx_call *call, char *buf, int nbytes) call->curpos = tcurpos + nbytes; call->curlen = tcurlen - nbytes; call->nLeft = tnLeft - nbytes; + + if (!call->nLeft) { + /* out of packet. Get another one. */ + NETPRI; + MUTEX_ENTER(&call->lock); + rxi_FreePacket(call->currentPacket); + call->currentPacket = (struct rx_packet *)0; + MUTEX_EXIT(&call->lock); + USERPRI; + } return nbytes; } @@ -373,6 +383,15 @@ rx_ReadProc32(struct rx_call *call, afs_int32 * value) call->curpos = tcurpos + sizeof(afs_int32); call->curlen = (u_short)(tcurlen - sizeof(afs_int32)); call->nLeft = (u_short)(tnLeft - sizeof(afs_int32)); + if (!call->nLeft) { + /* out of packet. Get another one. */ + NETPRI; + MUTEX_ENTER(&call->lock); + rxi_FreePacket(call->currentPacket); + call->currentPacket = (struct rx_packet *)0; + MUTEX_EXIT(&call->lock); + USERPRI; + } return sizeof(afs_int32); }