Ignore:
File:
1 edited

Legend:

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

    ra1a101d r5441670  
    7676        nconn = tcp_conn_new(lsock, fsock);
    7777        tcp_conn_add(nconn);
     78        tcp_conn_lock(nconn);
    7879
    7980        if (acpass == ap_active) {
     
    8384
    8485        if (oflags == tcp_open_nonblock) {
     86                tcp_conn_unlock(nconn);
     87                log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open -> %p", nconn);
    8588                *conn = nconn;
    8689                return TCP_EOK;
     
    8992        /* Wait for connection to be established or reset */
    9093        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open: Wait for connection.");
    91         fibril_mutex_lock(&nconn->lock);
    9294        while (nconn->cstate == st_listen ||
    9395            nconn->cstate == st_syn_sent ||
     
    99101                log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open: Connection was reset.");
    100102                assert(nconn->cstate == st_closed);
    101                 fibril_mutex_unlock(&nconn->lock);
     103                tcp_conn_unlock(nconn);
    102104                return TCP_ERESET;
    103105        }
    104106
    105         fibril_mutex_unlock(&nconn->lock);
     107        tcp_conn_unlock(nconn);
    106108        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open: Connection was established.");
    107109
     
    120122        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_send()", conn->name);
    121123
    122         fibril_mutex_lock(&conn->lock);
     124        tcp_conn_lock(conn);
    123125
    124126        if (conn->cstate == st_closed) {
    125                 fibril_mutex_unlock(&conn->lock);
     127                tcp_conn_unlock(conn);
    126128                return TCP_ENOTEXIST;
    127129        }
     
    134136
    135137        if (conn->snd_buf_fin) {
    136                 fibril_mutex_unlock(&conn->lock);
     138                tcp_conn_unlock(conn);
    137139                return TCP_ECLOSING;
    138140        }
     
    148150
    149151                if (conn->reset) {
    150                         fibril_mutex_unlock(&conn->lock);
     152                        tcp_conn_unlock(conn);
    151153                        return TCP_ERESET;
    152154                }
     
    164166
    165167        tcp_tqueue_new_data(conn);
    166         fibril_mutex_unlock(&conn->lock);
     168        tcp_conn_unlock(conn);
    167169
    168170        return TCP_EOK;
     
    177179        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_receive()", conn->name);
    178180
    179         fibril_mutex_lock(&conn->lock);
     181        tcp_conn_lock(conn);
    180182
    181183        if (conn->cstate == st_closed) {
    182                 fibril_mutex_unlock(&conn->lock);
     184                tcp_conn_unlock(conn);
    183185                return TCP_ENOTEXIST;
    184186        }
     
    196198                if (conn->rcv_buf_fin) {
    197199                        /* End of data, peer closed connection */
    198                         fibril_mutex_unlock(&conn->lock);
     200                        tcp_conn_unlock(conn);
    199201                        return TCP_ECLOSING;
    200202                } else {
    201203                        /* Connection was reset */
    202204                        assert(conn->reset);
    203                         fibril_mutex_unlock(&conn->lock);
     205                        tcp_conn_unlock(conn);
    204206                        return TCP_ERESET;
    205207                }
     
    226228            conn->name, xfer_size);
    227229
    228         fibril_mutex_unlock(&conn->lock);
     230        tcp_conn_unlock(conn);
    229231
    230232        return TCP_EOK;
     
    234236tcp_error_t tcp_uc_close(tcp_conn_t *conn)
    235237{
    236         log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_close()", conn->name);
    237 
    238         fibril_mutex_lock(&conn->lock);
     238        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_close(%p)", conn->name,
     239            conn);
     240
     241        tcp_conn_lock(conn);
    239242
    240243        if (conn->cstate == st_closed) {
    241                 fibril_mutex_unlock(&conn->lock);
     244                log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - ENOTEXIST");
     245                tcp_conn_unlock(conn);
    242246                return TCP_ENOTEXIST;
    243247        }
    244248
     249        if (conn->cstate == st_listen || conn->cstate == st_syn_sent) {
     250                log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - listen/syn_sent");
     251                tcp_conn_reset(conn);
     252                tcp_conn_remove(conn);
     253                tcp_conn_unlock(conn);
     254                return TCP_EOK;
     255        }
     256
    245257        if (conn->snd_buf_fin) {
    246                 fibril_mutex_unlock(&conn->lock);
     258                log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - ECLOSING");
     259                tcp_conn_unlock(conn);
    247260                return TCP_ECLOSING;
    248261        }
    249262
     263        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - set snd_buf_fin");
    250264        conn->snd_buf_fin = true;
    251265        tcp_tqueue_new_data(conn);
    252266
    253         fibril_mutex_unlock(&conn->lock);
     267        tcp_conn_unlock(conn);
    254268        return TCP_EOK;
    255269}
     
    298312        tcp_conn_t *conn;
    299313
    300         log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_as_segment_arrived(f:(%x,%u), l:(%x,%u))",
    301             sp->foreign.addr.ipv4, sp->foreign.port,
    302             sp->local.addr.ipv4, sp->local.port);
     314        log_msg(LOG_DEFAULT, LVL_DEBUG,
     315            "tcp_as_segment_arrived(f:(%u), l:(%u))",
     316            sp->foreign.port, sp->local.port);
    303317
    304318        conn = tcp_conn_find_ref(sp);
     
    309323        }
    310324
    311         fibril_mutex_lock(&conn->lock);
     325        tcp_conn_lock(conn);
    312326
    313327        if (conn->cstate == st_closed) {
    314328                log_msg(LOG_DEFAULT, LVL_WARN, "Connection is closed.");
    315329                tcp_unexpected_segment(sp, seg);
    316                 fibril_mutex_unlock(&conn->lock);
     330                tcp_conn_unlock(conn);
    317331                tcp_conn_delref(conn);
    318332                return;
    319333        }
    320334
    321         if (conn->ident.foreign.addr.ipv4 == TCP_IPV4_ANY)
    322                 conn->ident.foreign.addr.ipv4 = sp->foreign.addr.ipv4;
     335        if (inet_addr_is_any(&conn->ident.foreign.addr))
     336                conn->ident.foreign.addr = sp->foreign.addr;
     337       
    323338        if (conn->ident.foreign.port == TCP_PORT_ANY)
    324339                conn->ident.foreign.port = sp->foreign.port;
    325         if (conn->ident.local.addr.ipv4 == TCP_IPV4_ANY)
    326                 conn->ident.local.addr.ipv4 = sp->local.addr.ipv4;
     340       
     341        if (inet_addr_is_any(&conn->ident.local.addr))
     342                conn->ident.local.addr = sp->local.addr;
    327343
    328344        tcp_conn_segment_arrived(conn, seg);
    329345
    330         fibril_mutex_unlock(&conn->lock);
     346        tcp_conn_unlock(conn);
    331347        tcp_conn_delref(conn);
    332348}
Note: See TracChangeset for help on using the changeset viewer.