Changeset 78192cc7 in mainline for uspace/srv/net/tcp/tqueue.c


Ignore:
Timestamp:
2014-07-13T14:06:23Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
af2a76c, f303f2cf
Parents:
c1b979a
Message:

Fibril timer locking improvements.

File:
1 edited

Legend:

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

    rc1b979a r78192cc7  
    5959static void tcp_tqueue_timer_clear(tcp_conn_t *conn);
    6060
     61#include <stdio.h>
    6162int tcp_tqueue_init(tcp_tqueue_t *tqueue, tcp_conn_t *conn)
    6263{
     64        printf("tcp_tqueue_init\n");
    6365        tqueue->conn = conn;
    64         tqueue->timer = fibril_timer_create();
     66        tqueue->timer = fibril_timer_create(&conn->lock);
    6567        if (tqueue->timer == NULL)
    6668                return ENOMEM;
     
    7880void tcp_tqueue_fini(tcp_tqueue_t *tqueue)
    7981{
     82        printf("tcp_tqueue_fini\n");
    8083        if (tqueue->timer != NULL) {
    8184                fibril_timer_destroy(tqueue->timer);
     
    319322        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: retransmit_timeout_func(%p)", conn->name, conn);
    320323
    321         fibril_mutex_lock(&conn->lock);
     324        tcp_conn_lock(conn);
    322325
    323326        if (conn->cstate == st_closed) {
    324327                log_msg(LOG_DEFAULT, LVL_DEBUG, "Connection already closed.");
    325                 fibril_mutex_unlock(&conn->lock);
     328                tcp_conn_unlock(conn);
    326329                tcp_conn_delref(conn);
    327330                return;
     
    331334        if (link == NULL) {
    332335                log_msg(LOG_DEFAULT, LVL_DEBUG, "Nothing to retransmit");
    333                 fibril_mutex_unlock(&conn->lock);
     336                tcp_conn_unlock(conn);
    334337                tcp_conn_delref(conn);
    335338                return;
     
    341344        if (rt_seg == NULL) {
    342345                log_msg(LOG_DEFAULT, LVL_ERROR, "Memory allocation failed.");
    343                 fibril_mutex_unlock(&conn->lock);
     346                tcp_conn_unlock(conn);
    344347                tcp_conn_delref(conn);
    345348                /* XXX Handle properly */
     
    353356        tcp_tqueue_timer_set(tqe->conn);
    354357
    355         fibril_mutex_unlock(&conn->lock);
     358        tcp_conn_unlock(conn);
    356359        tcp_conn_delref(conn);
     360
     361        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: retransmit_timeout_func(%p) end", conn->name, conn);
    357362}
    358363
     
    360365static void tcp_tqueue_timer_set(tcp_conn_t *conn)
    361366{
    362         log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set()", conn->name);
     367        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set() begin", conn->name);
    363368
    364369        /* Clear first to make sure we update refcnt correctly */
     
    366371
    367372        tcp_conn_addref(conn);
    368         fibril_timer_set(conn->retransmit.timer, RETRANSMIT_TIMEOUT,
     373        fibril_timer_set_locked(conn->retransmit.timer, RETRANSMIT_TIMEOUT,
    369374            retransmit_timeout_func, (void *) conn);
     375
     376        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set() end", conn->name);
    370377}
    371378
     
    373380static void tcp_tqueue_timer_clear(tcp_conn_t *conn)
    374381{
    375         log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear()", conn->name);
    376 
    377         if (fibril_timer_clear(conn->retransmit.timer) == fts_active)
     382        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear() begin", conn->name);
     383
     384        if (fibril_timer_clear_locked(conn->retransmit.timer) == fts_active)
    378385                tcp_conn_delref(conn);
     386
     387        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear() end", conn->name);
    379388}
    380389
Note: See TracChangeset for help on using the changeset viewer.