Changeset 309469de in mainline for uspace/srv/net/tcp/service.c


Ignore:
Timestamp:
2015-05-09T19:28:32Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b99f6e2
Parents:
1d4b815
Message:

Need to clean up dangling resources when client closes session.

File:
1 edited

Legend:

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

    r1d4b815 r309469de  
    783783
    784784#include <mem.h>
     785
     786static void tcp_client_init(tcp_client_t *client)
     787{
     788        memset(client, 0, sizeof(tcp_client_t));
     789        client->sess = NULL;
     790        list_initialize(&client->cconn);
     791        list_initialize(&client->clst);
     792}
     793
     794static void tcp_client_fini(tcp_client_t *client)
     795{
     796        tcp_cconn_t *cconn;
     797        size_t n;
     798
     799        n = list_count(&client->cconn);
     800        if (n != 0) {
     801                log_msg(LOG_DEFAULT, LVL_WARN, "Client with %zu active "
     802                    "connections closed session", n);
     803
     804                while (!list_empty(&client->cconn)) {
     805                        cconn = list_get_instance(list_first(&client->cconn),
     806                            tcp_cconn_t, lclient);
     807                        tcp_uc_close(cconn->conn);
     808                        tcp_cconn_destroy(cconn);
     809                }
     810        }
     811
     812        n = list_count(&client->clst);
     813        if (n != 0) {
     814                log_msg(LOG_DEFAULT, LVL_WARN, "Client with %zu active "
     815                    "listeners closed session", n);
     816                /* XXX Destroy listeners */
     817        }
     818}
     819
    785820static void tcp_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    786821{
     
    793828            &client);
    794829
    795         memset(&client, 0, sizeof(client));
    796         client.sess = NULL;
    797         list_initialize(&client.cconn);
    798         list_initialize(&client.clst);
    799 //      list_initialize(&client.crcv_queue);
     830        tcp_client_init(&client);
    800831
    801832        while (true) {
     
    810841                        /* The other side has hung up */
    811842                        async_answer_0(callid, EOK);
    812                         return;
     843                        break;
    813844                }
    814845
     
    852883                }
    853884        }
    854         log_msg(LOG_DEFAULT, LVL_DEBUG,
    855             "tcp_client_conn TERMINATED ***************************");
     885
     886        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_client_conn TERMINATED");
     887        tcp_client_fini(&client);
    856888}
    857889
Note: See TracChangeset for help on using the changeset viewer.