Changeset 1ddbf81 in mainline for uspace/srv/net/tcp/iqueue.c


Ignore:
Timestamp:
2017-09-03T09:22:21Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
20c82e3
Parents:
e73dbc1
Message:

Add TCP iqueue test and missing seq_no_segment_ready test. Fix iqueue segments being inserted in the wrong order and fix infinite loop when two segments inserted in iqueue in descending order.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tcp/iqueue.c

    re73dbc1 r1ddbf81  
    8484                    tcp_iqueue_entry_t, link);
    8585
    86                 if (seq_no_seg_cmp(iqueue->conn, iqe->seg, qe->seg) >= 0)
     86                if (seq_no_seg_cmp(iqueue->conn, iqe->seg, qe->seg) < 0)
    8787                        break;
     88
     89                link = list_next(link, &iqueue->list);
    8890        }
    8991
     
    9294        else
    9395                list_append(&iqe->link, &iqueue->list);
     96}
     97
     98/** Remove segment from incoming queue.
     99 *
     100 * @param iqueue        Incoming queue
     101 * @param seg           Segment
     102 */
     103void tcp_iqueue_remove_seg(tcp_iqueue_t *iqueue, tcp_segment_t *seg)
     104{
     105        tcp_iqueue_entry_t *qe;
     106        link_t *link;
     107
     108        log_msg(LOG_DEFAULT, LVL_NOTE, "tcp_iqueue_remove_seg()");
     109
     110        link = list_first(&iqueue->list);
     111        while (link != NULL) {
     112                        log_msg(LOG_DEFAULT, LVL_NOTE, "tcp_iqueue_remove_seg() - next");
     113                qe = list_get_instance(link,
     114                    tcp_iqueue_entry_t, link);
     115
     116                if (qe->seg == seg) {
     117                        log_msg(LOG_DEFAULT, LVL_NOTE, "tcp_iqueue_remove_seg() - found, DONE");
     118                        list_remove(&qe->link);
     119                        free(qe);
     120                        return;
     121                }
     122
     123                link = list_next(link, &iqueue->list);
     124        }
     125
     126        log_msg(LOG_DEFAULT, LVL_NOTE, "tcp_iqueue_remove_seg() - not found");
     127        assert(false);
    94128}
    95129
Note: See TracChangeset for help on using the changeset viewer.