------------------------------------------------------------
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);

Reply via email to