Ignore:
File:
1 edited

Legend:

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

    rc0f3460 r7c15d6f  
    11/*
    2  * Copyright (c) 2011 Jiri Svoboda
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6262{
    6363        tqueue->conn = conn;
    64         tqueue->timer = fibril_timer_create();
     64        tqueue->timer = fibril_timer_create(&conn->lock);
    6565        if (tqueue->timer == NULL)
    6666                return ENOMEM;
     
    9292        seg = tcp_segment_make_ctrl(ctrl);
    9393        tcp_tqueue_seg(conn, seg);
     94        tcp_segment_delete(seg);
    9495}
    9596
     
    212213
    213214        tcp_tqueue_seg(conn, seg);
     215        tcp_segment_delete(seg);
    214216}
    215217
     
    280282}
    281283
    282 void tcp_transmit_segment(tcp_sockpair_t *sp, tcp_segment_t *seg)
     284void tcp_transmit_segment(inet_ep2_t *epp, tcp_segment_t *seg)
    283285{
    284286        log_msg(LOG_DEFAULT, LVL_DEBUG,
    285             "tcp_transmit_segment(f:(%u),l:(%u), %p)",
    286             sp->local.port, sp->foreign.port, seg);
    287        
     287            "tcp_transmit_segment(l:(%u),f:(%u), %p)",
     288            epp->local.port, epp->remote.port, seg);
     289
    288290        log_msg(LOG_DEFAULT, LVL_DEBUG, "SEG.SEQ=%" PRIu32 ", SEG.WND=%" PRIu32,
    289291            seg->seq, seg->wnd);
     
    299301        tcp_pdu_t *pdu;
    300302
    301         if (tcp_pdu_encode(sp, seg, &pdu) != EOK) {
     303        if (tcp_pdu_encode(epp, seg, &pdu) != EOK) {
    302304                log_msg(LOG_DEFAULT, LVL_WARN, "Not enough memory. Segment dropped.");
    303305                return;
     
    317319        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: retransmit_timeout_func(%p)", conn->name, conn);
    318320
    319         fibril_mutex_lock(&conn->lock);
     321        tcp_conn_lock(conn);
    320322
    321323        if (conn->cstate == st_closed) {
    322324                log_msg(LOG_DEFAULT, LVL_DEBUG, "Connection already closed.");
    323                 fibril_mutex_unlock(&conn->lock);
     325                tcp_conn_unlock(conn);
    324326                tcp_conn_delref(conn);
    325327                return;
     
    329331        if (link == NULL) {
    330332                log_msg(LOG_DEFAULT, LVL_DEBUG, "Nothing to retransmit");
    331                 fibril_mutex_unlock(&conn->lock);
     333                tcp_conn_unlock(conn);
    332334                tcp_conn_delref(conn);
    333335                return;
     
    339341        if (rt_seg == NULL) {
    340342                log_msg(LOG_DEFAULT, LVL_ERROR, "Memory allocation failed.");
    341                 fibril_mutex_unlock(&conn->lock);
     343                tcp_conn_unlock(conn);
    342344                tcp_conn_delref(conn);
    343345                /* XXX Handle properly */
     
    349351
    350352        /* Reset retransmission timer */
    351         tcp_tqueue_timer_set(tqe->conn);
    352 
    353         fibril_mutex_unlock(&conn->lock);
    354         tcp_conn_delref(conn);
     353        fibril_timer_set_locked(conn->retransmit.timer, RETRANSMIT_TIMEOUT,
     354            retransmit_timeout_func, (void *) conn);
     355
     356        tcp_conn_unlock(conn);
     357
     358        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: retransmit_timeout_func(%p) end", conn->name, conn);
    355359}
    356360
     
    358362static void tcp_tqueue_timer_set(tcp_conn_t *conn)
    359363{
    360         log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set()", conn->name);
     364        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set() begin", conn->name);
    361365
    362366        /* Clear first to make sure we update refcnt correctly */
     
    364368
    365369        tcp_conn_addref(conn);
    366         fibril_timer_set(conn->retransmit.timer, RETRANSMIT_TIMEOUT,
     370        fibril_timer_set_locked(conn->retransmit.timer, RETRANSMIT_TIMEOUT,
    367371            retransmit_timeout_func, (void *) conn);
     372
     373        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set() end", conn->name);
    368374}
    369375
     
    371377static void tcp_tqueue_timer_clear(tcp_conn_t *conn)
    372378{
    373         log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear()", conn->name);
    374 
    375         if (fibril_timer_clear(conn->retransmit.timer) == fts_active)
     379        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear() begin", conn->name);
     380
     381        if (fibril_timer_clear_locked(conn->retransmit.timer) == fts_active)
    376382                tcp_conn_delref(conn);
     383
     384        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear() end", conn->name);
    377385}
    378386
Note: See TracChangeset for help on using the changeset viewer.