Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/sysipc.c

    r455241b rb169619  
    199199                        list_remove(&phone->link);
    200200                        /* Drop callee->connected_phones reference */
    201                         kobject_put(&phone->kobject);
     201                        kobject_put(phone->kobject);
    202202                        phone->state = IPC_PHONE_SLAMMED;
    203203                        phone->label = 0;
     
    273273ipc_req_internal(cap_phone_handle_t handle, ipc_data_t *data, sysarg_t priv)
    274274{
    275         phone_t *phone = phone_from_kobject(
    276             kobject_get(TASK, handle, KOBJECT_TYPE_PHONE));
    277         if (!phone)
     275        kobject_t *kobj = kobject_get(TASK, handle, KOBJECT_TYPE_PHONE);
     276        if (!kobj->phone)
    278277                return ENOENT;
    279278
    280279        call_t *call = ipc_call_alloc();
    281280        if (!call) {
    282                 kobject_put(&phone->kobject);
     281                kobject_put(kobj);
    283282                return ENOMEM;
    284283        }
     
    287286        memcpy(call->data.args, data->args, sizeof(data->args));
    288287
    289         errno_t rc = request_preprocess(call, phone);
     288        errno_t rc = request_preprocess(call, kobj->phone);
    290289        if (!rc) {
    291290#ifdef CONFIG_UDEBUG
     
    293292#endif
    294293
    295                 kobject_add_ref(&call->kobject);
    296                 rc = ipc_call_sync(phone, call);
     294                kobject_add_ref(call->kobject);
     295                rc = ipc_call_sync(kobj->phone, call);
    297296                spinlock_lock(&call->forget_lock);
    298297                bool forgotten = call->forget;
    299298                spinlock_unlock(&call->forget_lock);
    300                 kobject_put(&call->kobject);
     299                kobject_put(call->kobject);
    301300
    302301#ifdef CONFIG_UDEBUG
     
    313312                                 * deallocation.
    314313                                 */
    315                                 kobject_put(&call->kobject);
     314                                kobject_put(call->kobject);
    316315                        } else {
    317316                                /*
     
    321320                                assert(rc == EINTR);
    322321                        }
    323                         kobject_put(&phone->kobject);
     322                        kobject_put(kobj);
    324323                        return rc;
    325324                }
     
    330329
    331330        memcpy(data->args, call->data.args, sizeof(data->args));
    332         kobject_put(&call->kobject);
    333         kobject_put(&phone->kobject);
     331        kobject_put(call->kobject);
     332        kobject_put(kobj);
    334333
    335334        return EOK;
     
    371370    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t label)
    372371{
    373         phone_t *phone = phone_from_kobject(
    374             kobject_get(TASK, handle, KOBJECT_TYPE_PHONE));
    375 
    376         if (!phone)
     372        kobject_t *kobj = kobject_get(TASK, handle, KOBJECT_TYPE_PHONE);
     373        if (!kobj)
    377374                return ENOENT;
    378375
    379         if (check_call_limit(phone)) {
    380                 kobject_put(&phone->kobject);
     376        if (check_call_limit(kobj->phone)) {
     377                kobject_put(kobj);
    381378                return ELIMIT;
    382379        }
     
    384381        call_t *call = ipc_call_alloc();
    385382        if (!call) {
    386                 kobject_put(&phone->kobject);
     383                kobject_put(kobj);
    387384                return ENOMEM;
    388385        }
     
    402399        call->data.answer_label = label;
    403400
    404         errno_t res = request_preprocess(call, phone);
     401        errno_t res = request_preprocess(call, kobj->phone);
    405402
    406403        if (!res)
    407                 ipc_call(phone, call);
     404                ipc_call(kobj->phone, call);
    408405        else
    409                 ipc_backsend_err(phone, call, res);
    410 
    411         kobject_put(&phone->kobject);
     406                ipc_backsend_err(kobj->phone, call, res);
     407
     408        kobject_put(kobj);
    412409        return EOK;
    413410}
     
    425422    sysarg_t label)
    426423{
    427         phone_t *phone = phone_from_kobject(
    428             kobject_get(TASK, handle, KOBJECT_TYPE_PHONE));
    429         if (!phone)
     424        kobject_t *kobj = kobject_get(TASK, handle, KOBJECT_TYPE_PHONE);
     425        if (!kobj)
    430426                return ENOENT;
    431427
    432         if (check_call_limit(phone)) {
    433                 kobject_put(&phone->kobject);
     428        if (check_call_limit(kobj->phone)) {
     429                kobject_put(kobj);
    434430                return ELIMIT;
    435431        }
     
    437433        call_t *call = ipc_call_alloc();
    438434        if (!call) {
    439                 kobject_put(&phone->kobject);
     435                kobject_put(kobj);
    440436                return ENOMEM;
    441437        }
     
    444440            sizeof(call->data.args));
    445441        if (rc != EOK) {
    446                 kobject_put(&call->kobject);
    447                 kobject_put(&phone->kobject);
     442                kobject_put(call->kobject);
     443                kobject_put(kobj);
    448444                return (sys_errno_t) rc;
    449445        }
     
    452448        call->data.answer_label = label;
    453449
    454         errno_t res = request_preprocess(call, phone);
     450        errno_t res = request_preprocess(call, kobj->phone);
    455451
    456452        if (!res)
    457                 ipc_call(phone, call);
     453                ipc_call(kobj->phone, call);
    458454        else
    459                 ipc_backsend_err(phone, call, res);
    460 
    461         kobject_put(&phone->kobject);
     455                ipc_backsend_err(kobj->phone, call, res);
     456
     457        kobject_put(kobj);
    462458        return EOK;
    463459}
     
    493489                return ENOENT;
    494490
    495         call_t *call = call_from_kobject(ckobj);
     491        call_t *call = ckobj->call;
    496492
    497493        ipc_data_t old;
     
    555551        }
    556552
    557         rc = ipc_forward(call, phone_from_kobject(pkobj), &TASK->answerbox, mode);
     553        rc = ipc_forward(call, pkobj->phone, &TASK->answerbox, mode);
    558554        if (rc != EOK) {
    559555                after_forward = true;
     
    663659                return ENOENT;
    664660
    665         call_t *call = call_from_kobject(kobj);
     661        call_t *call = kobj->call;
    666662        assert(!(call->flags & IPC_CALL_ANSWERED));
    667663
     
    710706                return ENOENT;
    711707
    712         call_t *call = call_from_kobject(kobj);
     708        call_t *call = kobj->call;
    713709        assert(!(call->flags & IPC_CALL_ANSWERED));
    714710
     
    755751                return ENOENT;
    756752
    757         errno_t rc = ipc_phone_hangup(phone_from_kobject(kobj));
     753        errno_t rc = ipc_phone_hangup(kobj->phone);
    758754        kobject_put(kobj);
    759755        cap_free(TASK, handle);
     
    801797
    802798                STRUCT_TO_USPACE(calldata, &call->data);
    803                 kobject_put(&call->kobject);
     799                kobject_put(call->kobject);
    804800
    805801                return EOK;
     
    810806
    811807                if (call->flags & IPC_CALL_DISCARD_ANSWER) {
    812                         kobject_put(&call->kobject);
     808                        kobject_put(call->kobject);
    813809                        goto restart;
    814810                }
     
    817813
    818814                STRUCT_TO_USPACE(calldata, &call->data);
    819                 kobject_put(&call->kobject);
     815                kobject_put(call->kobject);
    820816
    821817                return EOK;
     
    840836                goto error;
    841837
    842         kobject_add_ref(&call->kobject);
    843         cap_publish(TASK, handle, &call->kobject);
     838        kobject_add_ref(call->kobject);
     839        cap_publish(TASK, handle, call->kobject);
    844840        return EOK;
    845841
Note: See TracChangeset for help on using the changeset viewer.