Changes in uspace/lib/c/generic/ipc.c [c170438:706b4de] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/ipc.c
rc170438 r706b4de 148 148 } 149 149 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 165 150 call->u.callid = callid; 166 151 … … 210 195 ipc_callid_t callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid, 211 196 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 the230 * arguments that are beyond the limits of the fast version.231 */232 233 IPC_SET_ARG5(call->u.msg.data, 0);234 }235 197 236 198 ipc_finish_async(callid, phoneid, call); … … 351 313 ipc_callid_t callid = 352 314 ipc_call_async_internal(call->u.msg.phoneid, &call->u.msg.data); 353 354 if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY)355 break;356 315 357 316 list_remove(&call->list);
Note:
See TracChangeset
for help on using the changeset viewer.