osi_rxSleep(&call->rq);
#endif
}
- /* cp is no longer valid since we may have given up the lock */
cp = call->currentPacket;
call->startWait = 0;
int tcurlen;
int tnLeft;
char *tcurpos;
- int locked = 1;
SPLVAR;
/* Free any packets from the last call to ReadvProc/WritevProc */
- NETPRI;
- MUTEX_ENTER(&call->lock);
if (!queue_IsEmpty(&call->iovq)) {
#ifdef RXDEBUG_PACKET
call->iovqc -=
tnLeft = call->nLeft;
if (!call->error && tcurlen > nbytes && tnLeft > nbytes) {
tcurpos = call->curpos;
- MUTEX_EXIT(&call->lock);
- USERPRI;
- locked = 0;
-
memcpy(buf, tcurpos, nbytes);
call->curpos = tcurpos + nbytes;
if (!call->nLeft && call->currentPacket != NULL) {
/* out of packet. Get another one. */
- NETPRI;
- MUTEX_ENTER(&call->lock);
- locked = 1;
rxi_FreePacket(call->currentPacket);
call->currentPacket = (struct rx_packet *)0;
}
- bytes = nbytes;
- } else
- bytes = rxi_ReadProc(call, buf, nbytes);
-
- if (locked) {
- MUTEX_EXIT(&call->lock);
- USERPRI;
+ return nbytes;
}
+
+ NETPRI;
+ MUTEX_ENTER(&call->lock);
+ bytes = rxi_ReadProc(call, buf, nbytes);
+ MUTEX_EXIT(&call->lock);
+ USERPRI;
return bytes;
}
int tcurlen;
int tnLeft;
char *tcurpos;
- int locked = 1;
SPLVAR;
/* Free any packets from the last call to ReadvProc/WritevProc */
- NETPRI;
- MUTEX_ENTER(&call->lock);
if (!queue_IsEmpty(&call->iovq)) {
#ifdef RXDEBUG_PACKET
call->iovqc -=
if (!call->error && tcurlen >= sizeof(afs_int32)
&& tnLeft >= sizeof(afs_int32)) {
tcurpos = call->curpos;
- MUTEX_EXIT(&call->lock);
- USERPRI;
- locked = 0;
memcpy((char *)value, tcurpos, sizeof(afs_int32));
call->nLeft = (u_short)(tnLeft - sizeof(afs_int32));
if (!call->nLeft && call->currentPacket != NULL) {
/* out of packet. Get another one. */
- NETPRI;
- MUTEX_ENTER(&call->lock);
- locked = 1;
rxi_FreePacket(call->currentPacket);
call->currentPacket = (struct rx_packet *)0;
}
- bytes = sizeof(afs_int32);
- } else
- bytes = rxi_ReadProc(call, (char *)value, sizeof(afs_int32));
-
- if (locked) {
- MUTEX_EXIT(&call->lock);
- USERPRI;
+ return sizeof(afs_int32);
}
+
+ NETPRI;
+ MUTEX_ENTER(&call->lock);
+ bytes = rxi_ReadProc(call, (char *)value, sizeof(afs_int32));
+ MUTEX_EXIT(&call->lock);
+ USERPRI;
+
return bytes;
}
int tcurlen;
int tnFree;
char *tcurpos;
- int locked = 1;
SPLVAR;
/* Free any packets from the last call to ReadvProc/WritevProc */
- NETPRI;
- MUTEX_ENTER(&call->lock);
if (queue_IsNotEmpty(&call->iovq)) {
#ifdef RXDEBUG_PACKET
call->iovqc -=
if (!call->error && tcurlen >= nbytes && tnFree >= nbytes) {
tcurpos = call->curpos;
- MUTEX_EXIT(&call->lock);
- USERPRI;
- locked = 0;
-
memcpy(tcurpos, buf, nbytes);
call->curpos = tcurpos + nbytes;
call->curlen = (u_short)(tcurlen - nbytes);
call->nFree = (u_short)(tnFree - nbytes);
- bytes = nbytes;
- } else
- bytes = rxi_WriteProc(call, buf, nbytes);
-
- if (locked) {
- MUTEX_EXIT(&call->lock);
- USERPRI;
+ return nbytes;
}
+
+ NETPRI;
+ MUTEX_ENTER(&call->lock);
+ bytes = rxi_WriteProc(call, buf, nbytes);
+ MUTEX_EXIT(&call->lock);
+ USERPRI;
return bytes;
}
int tcurlen;
int tnFree;
char *tcurpos;
- int locked = 1;
SPLVAR;
- /* Free any packets from the last call to ReadvProc/WritevProc */
- NETPRI;
- MUTEX_ENTER(&call->lock);
if (queue_IsNotEmpty(&call->iovq)) {
#ifdef RXDEBUG_PACKET
call->iovqc -=
&& tnFree >= sizeof(afs_int32)) {
tcurpos = call->curpos;
- MUTEX_EXIT(&call->lock);
- USERPRI;
- locked = 0;
-
if (!((size_t)tcurpos & (sizeof(afs_int32) - 1))) {
*((afs_int32 *) (tcurpos)) = *value;
} else {
call->curpos = tcurpos + sizeof(afs_int32);
call->curlen = (u_short)(tcurlen - sizeof(afs_int32));
call->nFree = (u_short)(tnFree - sizeof(afs_int32));
- bytes = sizeof(afs_int32);
- } else
- bytes = rxi_WriteProc(call, (char *)value, sizeof(afs_int32));
-
- if (locked) {
- MUTEX_EXIT(&call->lock);
- USERPRI;
+ return sizeof(afs_int32);
}
+
+ NETPRI;
+ MUTEX_ENTER(&call->lock);
+ bytes = rxi_WriteProc(call, (char *)value, sizeof(afs_int32));
+ MUTEX_EXIT(&call->lock);
+ USERPRI;
return bytes;
}