Show
Ignore:
Timestamp:
05/13/99 23:57:22 (15 years ago)
Author:
ucaccsp
Message:

Fix reordering of mbus messages -- just in time for Ally McBeal?! :-)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • common/trunk/src/mbus.c

    r141 r143  
    6565        char            *dest; 
    6666        int              reliable; 
     67        int              complete;      /* Indicates that we've finished adding cmds to this message */ 
    6768        int              seqnum; 
    6869        int              retransmit_count; 
     
    832833        int              alen = strlen(cmnd) + strlen(args) + 4; 
    833834 
    834  
    835835        if (reliable && !addr_known(m, dest)) { 
    836836                debug_msg("Trying to send reliably to an unknown address...\n"); 
     
    843843        } 
    844844 
    845  
    846845        while (curr != NULL) { 
    847                 if (mbus_addr_match(curr->dest, dest)  
     846                if ((!curr->complete) 
     847                && mbus_addr_match(curr->dest, dest)  
    848848                && (curr->num_cmds < MBUS_MAX_QLEN)  
    849849                && ((curr->message_size + alen) < (MBUS_BUF_SIZE - 8))) { 
     850                        /* Slots message in if it fits, but this breaks ordering.  Msg 
     851                         * X+1 maybe shorter than X that is in next packet, so X+1 jumps 
     852                         * ahead. 
     853                         */ 
    850854                        curr->num_cmds++; 
    851855                        curr->reliable |= reliable; 
     
    854858                        curr->message_size += alen; 
    855859                        return; 
     860                } else { 
     861                        curr->complete = TRUE; 
    856862                } 
    857863                prev = curr; 
     
    865871        curr->seqnum           = m->seqnum++; 
    866872        curr->reliable         = reliable; 
     873        curr->complete         = FALSE; 
    867874        curr->num_cmds         = 1; 
    868875        curr->cmd_list[0]      = xstrdup(cmnd);