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