LIST_REMOVE(conns,conn);
char *m= xvasprintf(fmt,al);
- warn("C%d[%d] connection failed requeueing " RCI_TRIPLE_FMT_BASE ": %s",
+ warn("C%d (now %d) connection failed requeueing " RCI_TRIPLE_FMT_BASE ": %s",
conn->fd, conns.count, RCI_TRIPLE_VALS_BASE(requeue, /*nothing*/), m);
free(m);
if (r) sysdie("oop_rd_read for peer (fd=%d)",conn->fd);
LIST_ADDHEAD(conns, conn);
- notice("C%d[%d] connected %s",
- conns.count, conn->fd, conn->stream ? "streaming" : "plain");
+ notice("C%d (now %d) connected %s",
+ conn->fd, conns.count, conn->stream ? "streaming" : "plain");
connect_attempt_discard();
check_assign_articles();
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];
- if (rs > vp->iov_len) {
+ if (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;
+ break; /* rs -= rs */
}
}
int newu= conn->xmitu - done;
connfail(conn, "peer gave unexpected response to QUIT: %s", sani);
} else {
LIST_REMOVE(conns,conn);
- notice("C%d[%d] idle connection closed by us", conns.count, conn->fd);
+ notice("C%d (now %d) idle connection closed by us",
+ conn->fd, conns.count);
assert(!conn_busy);
conn_dispose(conn);
}
PEERBADMSG("peer timed us out or stopped accepting articles");
LIST_REMOVE(conns,conn);
- notice("C%d[%d] idle connection closed by peer", conns.count, conn->fd);
+ notice("C%d (now %d) idle connection closed by peer",
+ conns.count, conn->fd);
conn_dispose(conn);
return OOP_CONTINUE;