6 instance_start(struct service_instance
*in
)
12 instance_timeout(struct uloop_timeout
*t
)
14 struct service_instance
*in
;
16 in
= container_of(t
, struct service_instance
, timeout
);
17 kill(in
->proc
.pid
, SIGKILL
);
18 uloop_process_delete(&in
->proc
);
19 in
->proc
.cb(&in
->proc
, -1);
23 instance_exit(struct uloop_process
*p
, int ret
)
25 struct service_instance
*in
;
27 in
= container_of(p
, struct service_instance
, proc
);
28 uloop_timeout_cancel(&in
->timeout
);
34 instance_stop(struct service_instance
*in
, bool restart
)
36 if (!in
->proc
.pending
)
39 kill(in
->proc
.pid
, SIGTERM
);
43 instance_config_changed(struct service_instance
*in
, struct service_instance
*in_new
)
45 int len
= blob_pad_len(in
->config
);
47 if (len
!= blob_pad_len(in_new
->config
))
50 if (memcmp(in
->config
, in_new
->config
, blob_pad_len(in
->config
)) != 0)
57 instance_update(struct service_instance
*in
, struct service_instance
*in_new
)
59 bool changed
= instance_config_changed(in
, in_new
);
61 in
->config
= in_new
->config
;
65 instance_stop(in
, true);
70 instance_free(struct service_instance
*in
)
72 uloop_process_delete(&in
->proc
);
73 uloop_timeout_cancel(&in
->timeout
);
78 instance_init(struct service_instance
*in
, struct blob_attr
*config
)
81 in
->timeout
.cb
= instance_timeout
;
82 in
->proc
.cb
= instance_exit
;