Changes in kernel/generic/src/ipc/sysipc.c [503ffce:706b4de] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
r503ffce r706b4de 286 286 #endif 287 287 288 kobject_add_ref(call->kobject);288 ipc_call_hold(call); 289 289 rc = ipc_call_sync(kobj->phone, call); 290 290 spinlock_lock(&call->forget_lock); 291 291 bool forgotten = call->forget; 292 292 spinlock_unlock(&call->forget_lock); 293 kobject_put(call->kobject);293 ipc_call_release(call); 294 294 295 295 #ifdef CONFIG_UDEBUG … … 306 306 * deallocation. 307 307 */ 308 kobject_put(call->kobject);308 ipc_call_free(call); 309 309 } else { 310 310 /* … … 323 323 324 324 memcpy(data->args, call->data.args, sizeof(data->args)); 325 kobject_put(call->kobject);325 ipc_call_free(call); 326 326 kobject_put(kobj); 327 327 … … 347 347 /** Make a fast asynchronous call over IPC. 348 348 * 349 * This function can only handle threearguments of payload, but is faster than349 * This function can only handle four arguments of payload, but is faster than 350 350 * the generic function sys_ipc_call_async_slow(). 351 351 * … … 355 355 * @param arg2 Service-defined payload argument. 356 356 * @param arg3 Service-defined payload argument. 357 * @param label User-defined label.357 * @param arg4 Service-defined payload argument. 358 358 * 359 359 * @return Call hash on success. … … 362 362 */ 363 363 sysarg_t sys_ipc_call_async_fast(sysarg_t handle, sysarg_t imethod, 364 sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t label)364 sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4) 365 365 { 366 366 kobject_t *kobj = kobject_get(TASK, handle, KOBJECT_TYPE_PHONE); … … 378 378 IPC_SET_ARG2(call->data, arg2); 379 379 IPC_SET_ARG3(call->data, arg3); 380 IPC_SET_ARG4(call->data, arg4); 380 381 381 382 /* … … 384 385 */ 385 386 IPC_SET_ARG5(call->data, 0); 386 387 /* Set the user-defined label */388 call->data.label = label;389 387 390 388 int res = request_preprocess(call, kobj->phone); … … 403 401 * @param handle Phone capability for the call. 404 402 * @param data Userspace address of call data with the request. 405 * @param label User-defined label.406 403 * 407 404 * @return See sys_ipc_call_async_fast(). 408 405 * 409 406 */ 410 sysarg_t sys_ipc_call_async_slow(sysarg_t handle, ipc_data_t *data, 411 sysarg_t label) 407 sysarg_t sys_ipc_call_async_slow(sysarg_t handle, ipc_data_t *data) 412 408 { 413 409 kobject_t *kobj = kobject_get(TASK, handle, KOBJECT_TYPE_PHONE); … … 424 420 sizeof(call->data.args)); 425 421 if (rc != 0) { 426 kobject_put(call->kobject);422 ipc_call_free(call); 427 423 kobject_put(kobj); 428 424 return (sysarg_t) rc; 429 425 } 430 431 /* Set the user-defined label */432 call->data.label = label;433 426 434 427 int res = request_preprocess(call, kobj->phone); … … 728 721 * 729 722 * @return Hash of the call. 723 * If IPC_CALLID_NOTIFICATION bit is set in the hash, the 724 * call is a notification. IPC_CALLID_ANSWERED denotes an 725 * answer. 726 * 730 727 */ 731 728 sysarg_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec, … … 754 751 call->data.phone = (void *) call->priv; 755 752 756 call->data.flags = IPC_CALLID_NOTIFICATION;757 758 753 STRUCT_TO_USPACE(calldata, &call->data); 759 kobject_put(call->kobject);760 754 761 return (sysarg_t) call; 755 ipc_call_free(call); 756 757 return ((sysarg_t) call) | IPC_CALLID_NOTIFICATION; 762 758 } 763 759 … … 766 762 767 763 if (call->flags & IPC_CALL_DISCARD_ANSWER) { 768 kobject_put(call->kobject);764 ipc_call_free(call); 769 765 goto restart; 770 766 } 771 772 call->data.flags = IPC_CALLID_ANSWERED;773 767 774 768 STRUCT_TO_USPACE(calldata, &call->data); 775 kobject_put(call->kobject);769 ipc_call_free(call); 776 770 777 return ( sysarg_t) call;771 return ((sysarg_t) call) | IPC_CALLID_ANSWERED; 778 772 } 779 773
Note:
See TracChangeset
for help on using the changeset viewer.