obj->type = type;
INIT_LIST_HEAD(&obj->list);
INIT_LIST_HEAD(&obj->events);
- INIT_LIST_HEAD(&obj->watchers);
- INIT_LIST_HEAD(&obj->watched);
+ INIT_LIST_HEAD(&obj->subscribers);
+ INIT_LIST_HEAD(&obj->target_list);
if (type)
type->refcount++;
return NULL;
}
-void ubus_watch_new(struct ubus_object *obj, struct ubus_object *target, const char *method)
+void ubus_subscribe(struct ubus_object *obj, struct ubus_object *target, const char *method)
{
- struct ubus_watch *w;
+ struct ubus_subscription *s;
- w = calloc(1, sizeof(*w) + strlen(method) + 1);
- if (!w)
+ s = calloc(1, sizeof(*s) + strlen(method) + 1);
+ if (!s)
return;
- w->watcher = obj;
- w->watched = target;
- list_add(&w->watcher_list, &target->watchers);
- list_add(&w->watched_list, &obj->watched);
- strcpy(w->method, method);
+ s->subscriber = obj;
+ s->target = target;
+ list_add(&s->list, &target->subscribers);
+ list_add(&s->target_list, &obj->target_list);
+ strcpy(s->method, method);
}
-void ubus_watch_free(struct ubus_watch *w)
+void ubus_unsubscribe(struct ubus_subscription *s)
{
- list_del(&w->watcher_list);
- list_del(&w->watched_list);
- free(w);
+ list_del(&s->list);
+ list_del(&s->target_list);
+ free(s);
}
void ubusd_free_object(struct ubus_object *obj)
{
- struct ubus_watch *w, *tmp;
+ struct ubus_subscription *s, *tmp;
- list_for_each_entry_safe(w, tmp, &obj->watched, watched_list) {
- ubus_watch_free(w);
+ list_for_each_entry_safe(s, tmp, &obj->target_list, target_list) {
+ ubus_unsubscribe(s);
}
- list_for_each_entry_safe(w, tmp, &obj->watchers, watcher_list) {
- ubus_proto_notify_watch(w);
+ list_for_each_entry_safe(s, tmp, &obj->subscribers, list) {
+ ubus_notify_unsubscribe(s);
}
ubusd_event_cleanup_object(obj);