obj: use ref-counting in set objects
This commit is contained in:
@@ -90,8 +90,6 @@ void object_deref(object_t *obj)
|
||||
}
|
||||
|
||||
vm_cache_free(&obj->ob_type->ob_cache, obj);
|
||||
|
||||
spin_unlock_irqrestore(&obj->ob_lock, flags);
|
||||
}
|
||||
|
||||
void object_lock(object_t *obj, unsigned long *flags)
|
||||
|
||||
@@ -20,7 +20,7 @@ static kern_status_t set_get_child_at(object_t *obj, size_t at, object_t **out)
|
||||
size_t i = 0;
|
||||
queue_foreach(object_t, child, &set->s_list, ob_list) {
|
||||
if (i == at) {
|
||||
*out = child;
|
||||
*out = object_ref(child);
|
||||
return KERN_OK;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ static kern_status_t set_get_child_named(object_t *obj, const char *name, object
|
||||
}
|
||||
|
||||
if (!strcmp(child_name, name)) {
|
||||
*out = child;
|
||||
*out = object_ref(child);
|
||||
return KERN_OK;
|
||||
}
|
||||
}
|
||||
@@ -104,6 +104,7 @@ kern_status_t set_add_object(object_t *set_obj, object_t *obj)
|
||||
}
|
||||
}
|
||||
|
||||
object_ref(obj);
|
||||
queue_push_back(&set->s_list, &obj->ob_list);
|
||||
return KERN_OK;
|
||||
}
|
||||
@@ -116,6 +117,7 @@ kern_status_t set_remove_object(object_t *set_obj, object_t *obj)
|
||||
|
||||
struct set *set = object_data(set_obj);
|
||||
queue_delete(&set->s_list, &obj->ob_list);
|
||||
object_deref(obj);
|
||||
|
||||
return KERN_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user