Ignore:
File:
1 edited

Legend:

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

    r455241b rfc0de8c  
    4444#include <stdlib.h>
    4545
    46 static void phone_destroy(kobject_t *arg)
     46static void phone_destroy(void *arg)
    4747{
    48         phone_t *phone = phone_from_kobject(arg);
     48        phone_t *phone = (phone_t *) arg;
    4949        if (phone->hangup_call)
    50                 kobject_put(&phone->hangup_call->kobject);
     50                kobject_put(phone->hangup_call->kobject);
    5151        slab_free(phone_cache, phone);
    5252}
     
    7676                        return ENOMEM;
    7777                }
    78 
     78                kobject_t *kobj = kobject_alloc(FRAME_ATOMIC);
     79                if (!kobj) {
     80                        cap_free(TASK, handle);
     81                        slab_free(phone_cache, phone);
     82                        return ENOMEM;
     83                }
    7984                call_t *hcall = ipc_call_alloc();
    8085                if (!hcall) {
    8186                        cap_free(TASK, handle);
    8287                        slab_free(phone_cache, phone);
     88                        free(kobj);
    8389                        return ENOMEM;
    8490                }
     
    8894                phone->hangup_call = hcall;
    8995
     96                kobject_initialize(kobj, KOBJECT_TYPE_PHONE, phone);
     97                phone->kobject = kobj;
     98
    9099                if (publish)
    91                         cap_publish(task, handle, &phone->kobject);
     100                        cap_publish(task, handle, kobj);
    92101
    93102                *phandle = handle;
    94103                if (kobject)
    95                         *kobject = &phone->kobject;
     104                        *kobject = kobj;
    96105        }
    97106        return rc;
Note: See TracChangeset for help on using the changeset viewer.