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


Ignore:
Timestamp:
2015-06-08T22:00:22Z (10 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/udp.c

    r204ba47 r1f2b07a  
    7373
    7474        list_initialize(&udp->assoc);
     75        fibril_mutex_initialize(&udp->lock);
     76        fibril_condvar_initialize(&udp->cv);
    7577
    7678        rc = loc_service_get_id(SERVICE_NAME_UDP, &udp_svcid,
     
    107109
    108110        async_hangup(udp->sess);
     111
     112        fibril_mutex_lock(&udp->lock);
     113        while (!udp->cb_done)
     114                fibril_condvar_wait(&udp->cv, &udp->lock);
     115        fibril_mutex_unlock(&udp->lock);
     116
    109117        free(udp);
    110118}
     
    343351
    344352                if (!IPC_GET_IMETHOD(call)) {
    345                         /* TODO: Handle hangup */
    346                         return;
     353                        /* Hangup */
     354                        goto out;
    347355                }
    348356
     
    356364                }
    357365        }
     366out:
     367        fibril_mutex_lock(&udp->lock);
     368        udp->cb_done = true;
     369        fibril_mutex_unlock(&udp->lock);
     370        fibril_condvar_broadcast(&udp->cv);
    358371}
    359372
Note: See TracChangeset for help on using the changeset viewer.