Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 309469de in mainline


Ignore:
Timestamp:
2015-05-09T19:28:32Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
b99f6e2
Parents:
1d4b815
Message:

Need to clean up dangling resources when client closes session.

Location:
uspace/srv/net
Files:
2 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
  • uspace/srv/net/udp/service.c

    r1d4b815 r309469de  
    493493{
    494494        udp_client_t client;
     495        size_t n;
    495496
    496497        /* Accept the connection */
     
    513514                        /* The other side has hung up */
    514515                        async_answer_0(callid, EOK);
    515                         return;
     516                        break;
    516517                }
    517518
     
    543544                }
    544545        }
     546
     547        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_client_conn: terminated");
     548
     549        n = list_count(&client.cassoc);
     550        if (n != 0) {
     551                log_msg(LOG_DEFAULT, LVL_WARN, "udp_client_conn: "
     552                    "Client with %zu active associations closed session.", n);
     553                /* XXX Clean up */
     554        }
     555
     556        /* XXX Clean up client receive queue */
    545557}
    546558
Note: See TracChangeset for help on using the changeset viewer.