return false;
}
+static int cgm_unfreeze_fromhandler(struct lxc_handler *handler)
+{
+ struct cgm_data *d = handler->cgroup_info->data;
+
+ if (cgmanager_set_value_sync(NULL, cgroup_manager, "freezer", d->cgroup_path,
+ "freezer.state", "THAWED") != 0) {
+ ERROR("Error unfreezing %s", d->cgroup_path);
+ return false;
+ }
+ return true;
+}
+
static struct cgroup_ops cgmanager_ops = {
.destroy = cgm_destroy,
.init = cgm_init,
.get_cgroup = cgm_get_cgroup,
.get = cgm_get,
.set = cgm_set,
+ .unfreeze_fromhandler = cgm_unfreeze_fromhandler,
.name = "cgmanager"
};
#endif
return lxc_cgroup_get_hierarchy_path_handler(subsystem, handler);
}
+static int cgfs_unfreeze_fromhandler(struct lxc_handler *handler)
+{
+ char *cgabspath, *cgrelpath;
+ int ret;
+
+ cgrelpath = lxc_cgroup_get_hierarchy_path_handler("freezer", handler);
+ cgabspath = lxc_cgroup_find_abs_path("freezer", cgrelpath, true, NULL);
+ if (!cgabspath)
+ return -1;
+
+ ret = do_cgroup_set(cgabspath, "freezer.state", "THAWED");
+ free(cgabspath);
+ return ret;
+}
+
static struct cgroup_ops cgfs_ops = {
.destroy = cgfs_destroy,
.init = cgfs_init,
.get_cgroup = cgfs_get_cgroup,
.get = lxc_cgroupfs_get,
.set = lxc_cgroupfs_set,
+ .unfreeze_fromhandler = cgfs_unfreeze_fromhandler,
.name = "cgroupfs",
};
static void init_cg_ops(void)
init_cg_ops();
return active_cg_ops->get(filename, value, len, name, lxcpath);
}
+
+int lxc_unfreeze_fromhandler(struct lxc_handler *handler)
+{
+ return active_cg_ops->unfreeze_fromhandler(handler);
+}
char *(*get_cgroup)(struct lxc_handler *handler, const char *subsystem);
int (*set)(const char *filename, const char *value, const char *name, const char *lxcpath);
int (*get)(const char *filename, char *value, size_t len, const char *name, const char *lxcpath);
+ int (*unfreeze_fromhandler)(struct lxc_handler *handler);
const char *name;
};
extern char *cgroup_get_cgroup(struct lxc_handler *handler, const char *subsystem);
extern int lxc_cgroup_set(const char *filename, const char *value, const char *name, const char *lxcpath);
extern int lxc_cgroup_get(const char *filename, char *value, size_t len, const char *name, const char *lxcpath);
+extern int lxc_unfreeze_fromhandler(struct lxc_handler *handler);
#endif
memset(&rsp, 0, sizeof(rsp));
rsp.ret = kill(handler->pid, stopsignal);
if (!rsp.ret) {
- ret = lxc_unfreeze(handler->name, handler->lxcpath);
+ ret = lxc_unfreeze_fromhandler(handler);
if (!ret)
return 0;
ERROR("Failed to unfreeze %s:%s", handler->lxcpath, handler->name);