Changeset 1f2b07a in mainline for uspace/lib/c/generic/inet/tcp.c


Ignore:
Timestamp:
2015-06-08T22:00:22Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
dc0d6e5d
Parents:
204ba47
Message:

TCP and UDP client code needs to make sure callback connection handler has terminated before freeing session-related data.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/inet/tcp.c

    r204ba47 r1f2b07a  
    8181        list_initialize(&tcp->conn);
    8282        list_initialize(&tcp->listener);
     83        fibril_mutex_initialize(&tcp->lock);
     84        fibril_condvar_initialize(&tcp->cv);
    8385
    8486        rc = loc_service_get_id(SERVICE_NAME_TCP, &tcp_svcid,
     
    115117
    116118        async_hangup(tcp->sess);
     119
     120        fibril_mutex_lock(&tcp->lock);
     121        while (!tcp->cb_done)
     122                fibril_condvar_wait(&tcp->cv, &tcp->lock);
     123        fibril_mutex_unlock(&tcp->lock);
     124
    117125        free(tcp);
    118126}
     
    593601
    594602                if (!IPC_GET_IMETHOD(call)) {
    595                         /* TODO: Handle hangup */
    596                         return;
     603                        /* Hangup*/
     604                        goto out;
    597605                }
    598606
     
    621629                }
    622630        }
     631out:
     632        fibril_mutex_lock(&tcp->lock);
     633        tcp->cb_done = true;
     634        fibril_mutex_unlock(&tcp->lock);
     635        fibril_condvar_broadcast(&tcp->cv);
    623636}
    624637
Note: See TracChangeset for help on using the changeset viewer.