Merge pull request #1610 from sboeuf/fix_freezer_state
libcontainer: cgroups: Write freezer state after every state check
This commit is contained in:
commit
7c7d38bfe8
|
@ -29,11 +29,15 @@ func (s *FreezerGroup) Apply(d *cgroupData) error {
|
||||||
func (s *FreezerGroup) Set(path string, cgroup *configs.Cgroup) error {
|
func (s *FreezerGroup) Set(path string, cgroup *configs.Cgroup) error {
|
||||||
switch cgroup.Resources.Freezer {
|
switch cgroup.Resources.Freezer {
|
||||||
case configs.Frozen, configs.Thawed:
|
case configs.Frozen, configs.Thawed:
|
||||||
if err := writeFile(path, "freezer.state", string(cgroup.Resources.Freezer)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
// In case this loop does not exit because it doesn't get the expected
|
||||||
|
// state, let's write again this state, hoping it's going to be properly
|
||||||
|
// set this time. Otherwise, this loop could run infinitely, waiting for
|
||||||
|
// a state change that would never happen.
|
||||||
|
if err := writeFile(path, "freezer.state", string(cgroup.Resources.Freezer)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
state, err := readFile(path, "freezer.state")
|
state, err := readFile(path, "freezer.state")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -41,6 +45,7 @@ func (s *FreezerGroup) Set(path string, cgroup *configs.Cgroup) error {
|
||||||
if strings.TrimSpace(state) == string(cgroup.Resources.Freezer) {
|
if strings.TrimSpace(state) == string(cgroup.Resources.Freezer) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
time.Sleep(1 * time.Millisecond)
|
time.Sleep(1 * time.Millisecond)
|
||||||
}
|
}
|
||||||
case configs.Undefined:
|
case configs.Undefined:
|
||||||
|
|
Loading…
Reference in New Issue