Ignore:
File:
1 edited

Legend:

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

    rc170438 r706b4de  
    148148        }
    149149       
    150         if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY) {
    151                 futex_unlock(&ipc_futex);
    152                
    153                 call->u.msg.phoneid = phoneid;
    154                
    155                 futex_down(&async_futex);
    156                 list_append(&call->list, &queued_calls);
    157                
    158                 call->fid = fibril_get_id();
    159                 fibril_switch(FIBRIL_TO_MANAGER);
    160                 /* Async futex unlocked by previous call */
    161                
    162                 return;
    163         }
    164        
    165150        call->u.callid = callid;
    166151       
     
    210195        ipc_callid_t callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid,
    211196            imethod, arg1, arg2, arg3, arg4);
    212        
    213         if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY) {
    214                 if (!call) {
    215                         call = ipc_prepare_async(private, callback);
    216                         if (!call) {
    217                                 futex_unlock(&ipc_futex);
    218                                 return;
    219                         }
    220                 }
    221                
    222                 IPC_SET_IMETHOD(call->u.msg.data, imethod);
    223                 IPC_SET_ARG1(call->u.msg.data, arg1);
    224                 IPC_SET_ARG2(call->u.msg.data, arg2);
    225                 IPC_SET_ARG3(call->u.msg.data, arg3);
    226                 IPC_SET_ARG4(call->u.msg.data, arg4);
    227                
    228                 /*
    229                  * To achieve deterministic behavior, we always zero out the
    230                  * arguments that are beyond the limits of the fast version.
    231                  */
    232                
    233                 IPC_SET_ARG5(call->u.msg.data, 0);
    234         }
    235197       
    236198        ipc_finish_async(callid, phoneid, call);
     
    351313                ipc_callid_t callid =
    352314                    ipc_call_async_internal(call->u.msg.phoneid, &call->u.msg.data);
    353                
    354                 if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY)
    355                         break;
    356315               
    357316                list_remove(&call->list);
Note: See TracChangeset for help on using the changeset viewer.