Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/ipc.c

    r52d2603 rd7978525  
    8181LIST_INITIALIZE(queued_calls);
    8282
    83 static futex_t ipc_futex = FUTEX_INITIALIZER;
     83static atomic_t ipc_futex = FUTEX_INITIALIZER;
    8484
    8585/** Send asynchronous message via syscall.
     
    136136        if (!call) {
    137137                /* Nothing to do regardless if failed or not */
    138                 futex_unlock(&ipc_futex);
     138                futex_up(&ipc_futex);
    139139                return;
    140140        }
    141141       
    142142        if (callid == (ipc_callid_t) IPC_CALLRET_FATAL) {
    143                 futex_unlock(&ipc_futex);
     143                futex_up(&ipc_futex);
    144144               
    145145                /* Call asynchronous handler with error code */
     
    152152       
    153153        if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY) {
    154                 futex_unlock(&ipc_futex);
     154                futex_up(&ipc_futex);
    155155               
    156156                call->u.msg.phoneid = phoneid;
     
    175175        /* Add call to the list of dispatched calls */
    176176        list_append(&call->list, &dispatched_calls);
    177         futex_unlock(&ipc_futex);
     177        futex_up(&ipc_futex);
    178178}
    179179
     
    219219         */
    220220       
    221         futex_lock(&ipc_futex);
     221        futex_down(&ipc_futex);
    222222        ipc_callid_t callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid,
    223223            imethod, arg1, arg2, arg3, arg4);
     
    226226                if (!call) {
    227227                        call = ipc_prepare_async(private, callback);
    228                         if (!call) {
    229                                 futex_unlock(&ipc_futex);
     228                        if (!call)
    230229                                return;
    231                         }
    232230                }
    233231               
     
    291289         */
    292290       
    293         futex_lock(&ipc_futex);
     291        futex_down(&ipc_futex);
    294292        ipc_callid_t callid =
    295293            ipc_call_async_internal(phoneid, &call->u.msg.data);
     
    386384                        call->u.callid = callid;
    387385                       
    388                         futex_lock(&ipc_futex);
     386                        futex_down(&ipc_futex);
    389387                        list_append(&call->list, &dispatched_calls);
    390                         futex_unlock(&ipc_futex);
     388                        futex_up(&ipc_futex);
    391389                }
    392390               
     
    414412        callid &= ~IPC_CALLID_ANSWERED;
    415413       
    416         futex_lock(&ipc_futex);
     414        futex_down(&ipc_futex);
    417415       
    418416        link_t *item;
     
    425423                        list_remove(&call->list);
    426424                       
    427                         futex_unlock(&ipc_futex);
     425                        futex_up(&ipc_futex);
    428426                       
    429427                        if (call->callback)
     
    436434        }
    437435       
    438         futex_unlock(&ipc_futex);
     436        futex_up(&ipc_futex);
    439437}
    440438
Note: See TracChangeset for help on using the changeset viewer.