Ignore:
File:
1 edited

Legend:

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

    r79ae36dd r160b75e  
    4444void pipe_start_transaction(usb_pipe_t *pipe)
    4545{
    46         fibril_mutex_lock(&pipe->hc_sess_mutex);
     46        fibril_mutex_lock(&pipe->hc_phone_mutex);
    4747}
    4848
     
    5353void pipe_end_transaction(usb_pipe_t *pipe)
    5454{
    55         fibril_mutex_unlock(&pipe->hc_sess_mutex);
     55        fibril_mutex_unlock(&pipe->hc_phone_mutex);
    5656}
    5757
     
    8585{
    8686        pipe_acquire(pipe);
    87        
     87
    8888        if (pipe->refcount == 0) {
    8989                /* Need to open the phone by ourselves. */
    90                 async_sess_t *sess =
    91                     devman_device_connect(EXCHANGE_SERIALIZE, pipe->wire->hc_handle, 0);
    92                 if (!sess) {
     90                int phone = devman_device_connect(pipe->wire->hc_handle, 0);
     91                if (phone < 0) {
    9392                        if (hide_failure) {
    9493                                pipe->refcount_soft++;
    95                                 pipe_release(pipe);
    96                                 return EOK;
     94                                phone = EOK;
    9795                        }
    98                        
    9996                        pipe_release(pipe);
    100                         return ENOMEM;
     97                        return phone;
    10198                }
    102                
    10399                /*
    104100                 * No locking is needed, refcount is zero and whole pipe
    105101                 * mutex is locked.
    106102                 */
    107                
    108                 pipe->hc_sess = sess;
     103                pipe->hc_phone = phone;
    109104        }
    110        
    111105        pipe->refcount++;
     106
    112107        pipe_release(pipe);
    113        
     108
    114109        return EOK;
    115110}
     
    122117{
    123118        pipe_acquire(pipe);
    124        
    125119        if (pipe->refcount_soft > 0) {
    126120                pipe->refcount_soft--;
     
    128122                return;
    129123        }
    130        
    131124        assert(pipe->refcount > 0);
    132        
    133125        pipe->refcount--;
    134        
    135126        if (pipe->refcount == 0) {
    136127                /* We were the last users, let's hang-up. */
    137                 async_hangup(pipe->hc_sess);
    138                 pipe->hc_sess = NULL;
     128                async_hangup(pipe->hc_phone);
     129                pipe->hc_phone = -1;
    139130        }
    140        
    141131        pipe_release(pipe);
    142132}
Note: See TracChangeset for help on using the changeset viewer.