chiark
/
gitweb
/
~ian
/
inn-innduct.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7514a0c
)
Fix writev rs iovec loop
author
Ian Jackson
<ian@chiark.greenend.org.uk>
Tue, 4 May 2010 08:43:11 +0000
(09:43 +0100)
committer
Ian Jackson
<ian@chiark.greenend.org.uk>
Tue, 4 May 2010 08:43:11 +0000
(09:43 +0100)
backends/innduct.c
patch
|
blob
|
history
diff --git
a/backends/innduct.c
b/backends/innduct.c
index ab992673ca150f5e5bdee9d0dfaa1a8c4e8b2c1d..85e5d6541ebb036da8709f265597b1f0c090b782 100644
(file)
--- a/
backends/innduct.c
+++ b/
backends/innduct.c
@@
-1663,15
+1663,18
@@
static void *conn_write_some_xmits(Conn *conn) {
assert(rs > 0);
int done;
assert(rs > 0);
int done;
- for (done=0; rs && done<conn->xmitu; done++) {
+ for (done=0; rs; ) {
+ assert(done<conn->xmitu);
struct iovec *vp= &conn->xmit[done];
XmitDetails *dp= &conn->xmitd[done];
struct iovec *vp= &conn->xmit[done];
XmitDetails *dp= &conn->xmitd[done];
- if (rs > vp->iov_len) {
+ if (rs >
=
vp->iov_len) {
rs -= vp->iov_len;
rs -= vp->iov_len;
- xmit_free(dp);
+ xmit_free(dp); /* vp->iov_len -= vp->iov_len, etc. */
+ done++;
} else {
vp->iov_base= (char*)vp->iov_base + rs;
vp->iov_len -= rs;
} else {
vp->iov_base= (char*)vp->iov_base + rs;
vp->iov_len -= rs;
+ break; /* rs -= rs */
}
}
int newu= conn->xmitu - done;
}
}
int newu= conn->xmitu - done;