#include "rx_internal.h"
#include "rx_stats.h"
+#include "rx_conn.h"
+#include "rx_call.h"
+
#ifdef RX_LOCKS_DB
/* rxdb_fileID is used to identify the lock location, along with line#. */
static int rxdb_fileID = RXDB_FILE_RX_PACKET;
* just wait. */
NETPRI;
call->flags |= RX_CALL_WAIT_PACKETS;
- MUTEX_ENTER(&rx_refcnt_mutex);
CALL_HOLD(call, RX_CALL_REFCOUNT_PACKET);
- MUTEX_EXIT(&rx_refcnt_mutex);
MUTEX_EXIT(&call->lock);
rx_waitingForPackets = 1;
#endif
MUTEX_EXIT(&rx_freePktQ_lock);
MUTEX_ENTER(&call->lock);
- MUTEX_ENTER(&rx_refcnt_mutex);
CALL_RELE(call, RX_CALL_REFCOUNT_PACKET);
- MUTEX_EXIT(&rx_refcnt_mutex);
call->flags &= ~RX_CALL_WAIT_PACKETS;
USERPRI;
}
u_short * port)
{
struct sockaddr_in from;
- unsigned int nbytes;
+ int nbytes;
afs_int32 rlen;
afs_uint32 tlen, savelen;
struct msghdr msg;
p->wirevec[p->niovecs - 1].iov_len = savelen;
p->length = (u_short)(nbytes - RX_HEADER_SIZE);
- if ((nbytes > tlen) || (p->length & 0x8000)) { /* Bogus packet */
+ if (nbytes < 0 || (nbytes > tlen) || (p->length & 0x8000)) { /* Bogus packet */
if (nbytes < 0 && errno == EWOULDBLOCK) {
if (rx_stats_active)
rx_atomic_inc(&rx_stats.noPacketOnRead);
tpeer.reSends = htonl(tp->reSends);
tpeer.inPacketSkew = htonl(tp->inPacketSkew);
tpeer.outPacketSkew = htonl(tp->outPacketSkew);
- tpeer.rateFlag = htonl(tp->rateFlag);
tpeer.natMTU = htons(tp->natMTU);
tpeer.maxMTU = htons(tp->maxMTU);
tpeer.maxDgramPackets = htons(tp->maxDgramPackets);
}
if (len)
p->wirevec[i - 1].iov_len += len;
- RXS_PreparePacket(conn->securityObject, call, p);
MUTEX_ENTER(&call->lock);
+ RXS_PreparePacket(conn->securityObject, call, p);
}
/* Given an interface MTU size, calculate an adjusted MTU size that