Changeset e1b4ae0 in mainline for uspace/srv/net/tcp/conn.c


Ignore:
Timestamp:
2017-09-11T07:05:21Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9713b0b
Parents:
975d528
Message:

Start adding tests for TCP conn module. Make sure all connections have been freed at the end of a test.

File:
1 edited

Legend:

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

    r975d528 re1b4ae0  
    5959#define TIME_WAIT_TIMEOUT       (2*MAX_SEGMENT_LIFETIME)
    6060
     61/** List of all allocated connections */
    6162static LIST_INITIALIZE(conn_list);
    6263/** Taken after tcp_conn_t lock */
    6364static FIBRIL_MUTEX_INITIALIZE(conn_list_lock);
     65/** Connection association map */
    6466static amap_t *amap;
     67static FIBRIL_MUTEX_INITIALIZE(amap_lock);
    6568
    6669static void tcp_conn_seg_process(tcp_conn_t *, tcp_segment_t *);
     
    8588
    8689        return EOK;
     90}
     91
     92/** Finalize connections. */
     93void tcp_conns_fini(void)
     94{
     95        amap_destroy(amap);
     96        amap = NULL;
     97
     98        assert(list_empty(&conn_list));
    8799}
    88100
     
    156168        if (epp != NULL)
    157169                conn->ident = *epp;
     170
     171        fibril_mutex_lock(&conn_list_lock);
     172        list_append(&conn->link, &conn_list);
     173        fibril_mutex_unlock(&conn_list_lock);
    158174
    159175        return conn;
     
    192208        tcp_tqueue_fini(&conn->retransmit);
    193209
     210        fibril_mutex_lock(&conn_list_lock);
     211        list_remove(&conn->link);
     212        fibril_mutex_unlock(&conn_list_lock);
     213
    194214        if (conn->rcv_buf != NULL)
    195215                free(conn->rcv_buf);
     
    263283        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_conn_delete(%p)", conn->name, conn);
    264284
     285        assert(conn->mapped == false);
    265286        assert(conn->deleted == false);
    266287        conn->deleted = true;
     
    280301
    281302        tcp_conn_addref(conn);
    282         fibril_mutex_lock(&conn_list_lock);
     303        fibril_mutex_lock(&amap_lock);
    283304
    284305        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_add: conn=%p", conn);
     
    287308        if (rc != EOK) {
    288309                tcp_conn_delref(conn);
    289                 fibril_mutex_unlock(&conn_list_lock);
     310                fibril_mutex_unlock(&amap_lock);
    290311                return rc;
    291312        }
    292313
    293314        conn->ident = aepp;
    294         list_append(&conn->link, &conn_list);
    295         fibril_mutex_unlock(&conn_list_lock);
     315        conn->mapped = true;
     316        fibril_mutex_unlock(&amap_lock);
    296317
    297318        return EOK;
     
    304325void tcp_conn_remove(tcp_conn_t *conn)
    305326{
    306         if (!link_used(&conn->link))
    307                 return;
    308 
    309         fibril_mutex_lock(&conn_list_lock);
     327        if (!conn->mapped)
     328                return;
     329
     330        fibril_mutex_lock(&amap_lock);
    310331        amap_remove(amap, &conn->ident);
    311         list_remove(&conn->link);
    312         fibril_mutex_unlock(&conn_list_lock);
     332        conn->mapped = false;
     333        fibril_mutex_unlock(&amap_lock);
    313334        tcp_conn_delref(conn);
    314335}
     
    400421        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_find_ref(%p)", epp);
    401422
    402         fibril_mutex_lock(&conn_list_lock);
     423        fibril_mutex_lock(&amap_lock);
    403424
    404425        rc = amap_find_match(amap, epp, &arg);
    405426        if (rc != EOK) {
    406427                assert(rc == ENOENT);
    407                 fibril_mutex_unlock(&conn_list_lock);
     428                fibril_mutex_unlock(&amap_lock);
    408429                return NULL;
    409430        }
     
    412433        tcp_conn_addref(conn);
    413434
    414         fibril_mutex_unlock(&conn_list_lock);
     435        fibril_mutex_unlock(&amap_lock);
    415436        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_find_ref: got conn=%p",
    416437            conn);
     
    424445void tcp_conn_reset(tcp_conn_t *conn)
    425446{
     447        assert(fibril_mutex_is_locked(&conn->lock));
     448
    426449        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_conn_reset()", conn->name);
    427450        conn->reset = true;
     
    12231246
    12241247                /* Need to remove and re-insert connection with new identity */
    1225                 fibril_mutex_lock(&conn_list_lock);
     1248                fibril_mutex_lock(&amap_lock);
    12261249
    12271250                if (inet_addr_is_any(&conn->ident.remote.addr))
     
    12391262                        assert(rc == ENOMEM);
    12401263                        log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory.");
    1241                         fibril_mutex_unlock(&conn_list_lock);
     1264                        fibril_mutex_unlock(&amap_lock);
    12421265                        tcp_conn_unlock(conn);
    12431266                        return;
     
    12451268
    12461269                amap_remove(amap, &oldepp);
    1247                 fibril_mutex_unlock(&conn_list_lock);
     1270                fibril_mutex_unlock(&amap_lock);
    12481271
    12491272                conn->name = (char *) "a";
Note: See TracChangeset for help on using the changeset viewer.