Changes in kernel/generic/src/ipc/sysipc.c [fdd4898:cc574511] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
rfdd4898 rcc574511 40 40 #include <debug.h> 41 41 #include <ipc/ipc.h> 42 #include < abi/ipc/methods.h>42 #include <ipc/ipc_methods.h> 43 43 #include <ipc/sysipc.h> 44 44 #include <ipc/irq.h> 45 45 #include <ipc/ipcrsc.h> 46 #include <ipc/event.h>47 46 #include <ipc/kbox.h> 48 47 #include <synch/waitq.h> … … 135 134 case IPC_M_DATA_WRITE: 136 135 case IPC_M_DATA_READ: 137 case IPC_M_STATE_CHANGE_AUTHORIZE:138 136 return true; 139 137 default: … … 166 164 case IPC_M_DATA_WRITE: 167 165 case IPC_M_DATA_READ: 168 case IPC_M_STATE_CHANGE_AUTHORIZE:169 166 return true; 170 167 default: … … 337 334 free(answer->buffer); 338 335 answer->buffer = NULL; 339 } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_STATE_CHANGE_AUTHORIZE) {340 if (!IPC_GET_RETVAL(answer->data)) {341 /* The recipient authorized the change of state. */342 phone_t *recipient_phone;343 task_t *other_task_s;344 task_t *other_task_r;345 int rc;346 347 rc = phone_get(IPC_GET_ARG1(answer->data),348 &recipient_phone);349 if (rc != EOK) {350 IPC_SET_RETVAL(answer->data, ENOENT);351 return ENOENT;352 }353 354 mutex_lock(&recipient_phone->lock);355 if (recipient_phone->state != IPC_PHONE_CONNECTED) {356 mutex_unlock(&recipient_phone->lock);357 IPC_SET_RETVAL(answer->data, EINVAL);358 return EINVAL;359 }360 361 other_task_r = recipient_phone->callee->task;362 other_task_s = (task_t *) IPC_GET_ARG5(*olddata);363 364 /*365 * See if both the sender and the recipient meant the366 * same third party task.367 */368 if (other_task_r != other_task_s) {369 IPC_SET_RETVAL(answer->data, EINVAL);370 rc = EINVAL;371 } else {372 rc = event_task_notify_5(other_task_r,373 EVENT_TASK_STATE_CHANGE, false,374 IPC_GET_ARG1(*olddata),375 IPC_GET_ARG2(*olddata),376 IPC_GET_ARG3(*olddata),377 (sysarg_t) olddata->task,378 (sysarg_t) TASK);379 IPC_SET_RETVAL(answer->data, rc);380 }381 382 mutex_unlock(&recipient_phone->lock);383 return rc;384 }385 336 } 386 337 … … 505 456 } 506 457 507 break;508 }509 case IPC_M_STATE_CHANGE_AUTHORIZE: {510 phone_t *sender_phone;511 task_t *other_task_s;512 513 if (phone_get(IPC_GET_ARG5(call->data), &sender_phone) != EOK)514 return ENOENT;515 516 mutex_lock(&sender_phone->lock);517 if (sender_phone->state != IPC_PHONE_CONNECTED) {518 mutex_unlock(&sender_phone->lock);519 return EINVAL;520 }521 522 other_task_s = sender_phone->callee->task;523 524 mutex_unlock(&sender_phone->lock);525 526 /* Remember the third party task hash. */527 IPC_SET_ARG5(call->data, (sysarg_t) other_task_s);528 458 break; 529 459 }
Note:
See TracChangeset
for help on using the changeset viewer.