------------------------------------------------------------ revno: 353 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: Andrew Tridgell <[EMAIL PROTECTED]> branch nick: tridge timestamp: Sat 2007-05-26 16:41:32 +1000 message: drop any partialialy send packets when we get a socket write error modified: common/ctdb_io.c ctdb_io.c-20070409200335-dzfc7f3rra5rcf60-1 === modified file 'common/ctdb_io.c' --- a/common/ctdb_io.c 2007-05-26 04:46:12 +0000 +++ b/common/ctdb_io.c 2007-05-26 06:41:32 +0000 @@ -40,6 +40,7 @@ struct ctdb_queue_pkt *next, *prev; uint8_t *data; uint32_t length; + uint32_t full_length; }; struct ctdb_queue { @@ -175,6 +176,11 @@ } if (n == -1 && errno != EAGAIN && errno != EWOULDBLOCK) { + if (pkt->length != pkt->full_length) { + /* partial packet sent - we have to drop it */ + DLIST_REMOVE(queue->out_queue, pkt); + talloc_free(pkt); + } talloc_free(queue->fde); queue->fde = NULL; queue->fd = -1; @@ -262,6 +268,7 @@ CTDB_NO_MEMORY(queue->ctdb, pkt->data); pkt->length = length2; + pkt->full_length = length2; if (queue->out_queue == NULL && queue->fd != -1) { EVENT_FD_WRITEABLE(queue->fde);