Changeset bbf159a in mainline for uspace/srv/net/tl/tcp/tqueue.c


Ignore:
Timestamp:
2011-12-13T17:06:25Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7a8c1c4e
Parents:
0d29e0cd
Message:

Eliminate busy waiting when TCP send buffer is full.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tl/tcp/tqueue.c

    r0d29e0cd rbbf159a  
    167167        log_msg(LVL_DEBUG, "%s: tcp_tqueue_new_data()", conn->name);
    168168
     169        fibril_mutex_lock(&conn->snd_buf_lock);
     170
    169171        /* Number of free sequence numbers in send window */
    170172        avail_wnd = (conn->snd_una + conn->snd_wnd) - conn->snd_nxt;
     
    176178            xfer_seqlen);
    177179
    178         if (xfer_seqlen == 0)
    179                 return;
     180        if (xfer_seqlen == 0) {
     181                fibril_mutex_unlock(&conn->snd_buf_lock);
     182                return;
     183        }
    180184
    181185        /* XXX Do not always send immediately */
     
    188192                /* We are sending out FIN */
    189193                ctrl = CTL_FIN;
    190                 tcp_conn_fin_sent(conn);
    191194        } else {
    192195                ctrl = 0;
     
    195198        seg = tcp_segment_make_data(ctrl, conn->snd_buf, data_size);
    196199        if (seg == NULL) {
     200                fibril_mutex_unlock(&conn->snd_buf_lock);
    197201                log_msg(LVL_ERROR, "Memory allocation failure.");
    198202                return;
     
    206210        if (send_fin)
    207211                conn->snd_buf_fin = false;
     212
     213        fibril_condvar_broadcast(&conn->snd_buf_cv);
     214        fibril_mutex_unlock(&conn->snd_buf_lock);
     215
     216        if (send_fin)
     217                tcp_conn_fin_sent(conn);
    208218
    209219        tcp_tqueue_seg(conn, seg);
Note: See TracChangeset for help on using the changeset viewer.