Changes in uspace/lib/c/generic/ipc.c [a35b458:5a6cc679] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/ipc.c
ra35b458 r5a6cc679 56 56 ipc_async_callback_t callback; 57 57 void *private; 58 58 59 59 struct { 60 60 ipc_call_t data; … … 78 78 if (callback) 79 79 callback(private, ENOMEM, NULL); 80 80 81 81 return NULL; 82 82 } 83 83 84 84 call->callback = callback; 85 85 call->private = private; 86 86 87 87 return call; 88 88 } … … 99 99 return; 100 100 } 101 101 102 102 if (rc != EOK) { 103 103 /* Call asynchronous handler with error code */ 104 104 if (call->callback) 105 105 call->callback(call->private, ENOENT, NULL); 106 106 107 107 free(call); 108 108 return; … … 135 135 if (!call) 136 136 return; 137 137 138 138 errno_t rc = (errno_t) __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phandle, imethod, arg1, 139 139 arg2, arg3, (sysarg_t) call); 140 140 141 141 ipc_finish_async(rc, call); 142 142 } … … 167 167 if (!call) 168 168 return; 169 169 170 170 IPC_SET_IMETHOD(call->msg.data, imethod); 171 171 IPC_SET_ARG1(call->msg.data, arg1); … … 174 174 IPC_SET_ARG4(call->msg.data, arg4); 175 175 IPC_SET_ARG5(call->msg.data, arg5); 176 176 177 177 errno_t rc = (errno_t) __SYSCALL3(SYS_IPC_CALL_ASYNC_SLOW, phandle, 178 178 (sysarg_t) &call->msg.data, (sysarg_t) call); 179 179 180 180 ipc_finish_async(rc, call); 181 181 } … … 222 222 { 223 223 ipc_call_t data; 224 224 225 225 IPC_SET_RETVAL(data, retval); 226 226 IPC_SET_ARG1(data, arg1); … … 229 229 IPC_SET_ARG4(data, arg4); 230 230 IPC_SET_ARG5(data, arg5); 231 231 232 232 return (errno_t) __SYSCALL2(SYS_IPC_ANSWER_SLOW, chandle, (sysarg_t) &data); 233 233 } … … 261 261 { 262 262 errno_t rc = (errno_t) __SYSCALL3(SYS_IPC_WAIT, (sysarg_t) call, usec, flags); 263 263 264 264 /* Handle received answers */ 265 265 if ((rc == EOK) && (call->cap_handle == CAP_NIL) && … … 267 267 handle_answer(call); 268 268 } 269 269 270 270 return rc; 271 271 } … … 292 292 { 293 293 errno_t rc; 294 294 295 295 do { 296 296 rc = ipc_wait_cycle(call, usec, SYNCH_FLAGS_NONE); 297 297 } while ((rc == EOK) && (call->cap_handle == CAP_NIL) && (call->flags & IPC_CALL_ANSWERED)); 298 298 299 299 return rc; 300 300 } … … 312 312 { 313 313 errno_t rc; 314 314 315 315 do { 316 316 rc = ipc_wait_cycle(call, SYNCH_NO_TIMEOUT, 317 317 SYNCH_FLAGS_NON_BLOCKING); 318 318 } while ((rc == EOK) && (call->cap_handle == CAP_NIL) && (call->flags & IPC_CALL_ANSWERED)); 319 319 320 320 return rc; 321 321 } … … 362 362 { 363 363 ipc_call_t data; 364 364 365 365 IPC_SET_IMETHOD(data, imethod); 366 366 IPC_SET_ARG1(data, arg1); … … 369 369 IPC_SET_ARG4(data, arg4); 370 370 IPC_SET_ARG5(data, arg5); 371 371 372 372 return (errno_t) __SYSCALL4(SYS_IPC_FORWARD_SLOW, chandle, phandle, 373 373 (sysarg_t) &data, mode);
Note:
See TracChangeset
for help on using the changeset viewer.