+static bool
+instance_config_changed(struct service_instance *in, struct service_instance *in_new)
+{
+ int len = blob_pad_len(in->config);
+
+ if (len != blob_pad_len(in_new->config))
+ return true;
+
+ if (memcmp(in->config, in_new->config, blob_pad_len(in->config)) != 0)
+ return true;
+
+ return false;
+}
+
+static bool
+update_instance(struct service_instance *in, struct service_instance *in_new)
+{
+ bool changed = instance_config_changed(in, in_new);
+
+ in->config = in_new->config;
+ if (!changed)
+ return false;
+
+ stop_instance(in, true);
+ return true;
+}
+
+static void
+free_instance(struct service_instance *in)
+{
+ uloop_process_delete(&in->proc);
+ uloop_timeout_cancel(&in->timeout);
+ free(in);
+}
+
+static void
+init_instance(struct service_instance *in, struct blob_attr *config)
+{
+ in->config = config;
+ in->timeout.cb = instance_timeout;
+ in->proc.cb = instance_exit;