Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/src/pipepriv.c

    r160b75e r79ae36dd  
    4444void pipe_start_transaction(usb_pipe_t *pipe)
    4545{
    46         fibril_mutex_lock(&pipe->hc_phone_mutex);
     46        fibril_mutex_lock(&pipe->hc_sess_mutex);
    4747}
    4848
     
    5353void pipe_end_transaction(usb_pipe_t *pipe)
    5454{
    55         fibril_mutex_unlock(&pipe->hc_phone_mutex);
     55        fibril_mutex_unlock(&pipe->hc_sess_mutex);
    5656}
    5757
     
    8585{
    8686        pipe_acquire(pipe);
    87 
     87       
    8888        if (pipe->refcount == 0) {
    8989                /* Need to open the phone by ourselves. */
    90                 int phone = devman_device_connect(pipe->wire->hc_handle, 0);
    91                 if (phone < 0) {
     90                async_sess_t *sess =
     91                    devman_device_connect(EXCHANGE_SERIALIZE, pipe->wire->hc_handle, 0);
     92                if (!sess) {
    9293                        if (hide_failure) {
    9394                                pipe->refcount_soft++;
    94                                 phone = EOK;
     95                                pipe_release(pipe);
     96                                return EOK;
    9597                        }
     98                       
    9699                        pipe_release(pipe);
    97                         return phone;
     100                        return ENOMEM;
    98101                }
     102               
    99103                /*
    100104                 * No locking is needed, refcount is zero and whole pipe
    101105                 * mutex is locked.
    102106                 */
    103                 pipe->hc_phone = phone;
     107               
     108                pipe->hc_sess = sess;
    104109        }
     110       
    105111        pipe->refcount++;
    106 
    107112        pipe_release(pipe);
    108 
     113       
    109114        return EOK;
    110115}
     
    117122{
    118123        pipe_acquire(pipe);
     124       
    119125        if (pipe->refcount_soft > 0) {
    120126                pipe->refcount_soft--;
     
    122128                return;
    123129        }
     130       
    124131        assert(pipe->refcount > 0);
     132       
    125133        pipe->refcount--;
     134       
    126135        if (pipe->refcount == 0) {
    127136                /* We were the last users, let's hang-up. */
    128                 async_hangup(pipe->hc_phone);
    129                 pipe->hc_phone = -1;
     137                async_hangup(pipe->hc_sess);
     138                pipe->hc_sess = NULL;
    130139        }
     140       
    131141        pipe_release(pipe);
    132142}
Note: See TracChangeset for help on using the changeset viewer.