~xnox/ubuntu/saucy/lxc/dep8

« back to all changes in this revision

Viewing changes to src/lxc/freezer.c

  • Committer: Bazaar Package Importer
  • Author(s): Guido Trotter
  • Date: 2010-08-04 13:23:42 UTC
  • mfrom: (1.2.5 upstream)
  • mto: (3.1.15 sid)
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20100804132342-m9ok3c7o5bhzab2k
Tags: upstream-0.7.2
ImportĀ upstreamĀ versionĀ 0.7.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
{
43
43
        char *nsgroup;
44
44
        char freezer[MAXPATHLEN], *f;
 
45
        char tmpf[32];
45
46
        int fd, ret;
46
47
        
47
48
        ret = lxc_cgroup_path_get(&nsgroup, name);
50
51
 
51
52
        snprintf(freezer, MAXPATHLEN, "%s/freezer.state", nsgroup);
52
53
 
53
 
        fd = open(freezer, O_WRONLY);
 
54
        fd = open(freezer, O_RDWR);
54
55
        if (fd < 0) {
55
56
                SYSERROR("failed to open freezer for '%s'", name);
56
57
                return -1;
58
59
 
59
60
        if (freeze) {
60
61
                f = "FROZEN";
61
 
                ret = write(fd, f, strlen(f) + 1) < 0;
 
62
                ret = write(fd, f, strlen(f) + 1);
62
63
        } else {
63
64
                f = "THAWED";
64
 
                ret = write(fd, f, strlen(f) + 1) < 0;
 
65
                ret = write(fd, f, strlen(f) + 1);
65
66
 
66
67
                /* compatibility code with old freezer interface */
67
 
                if (ret) {
 
68
                if (ret < 0) {
68
69
                        f = "RUNNING";
69
70
                        ret = write(fd, f, strlen(f) + 1) < 0;
70
71
                }
71
72
        }
72
73
 
 
74
        if (ret < 0) {
 
75
                SYSERROR("failed to write '%s' to '%s'", f, freezer);
 
76
                goto out;
 
77
        }
 
78
 
 
79
        while (1) {
 
80
                ret = lseek(fd, 0L, SEEK_SET);
 
81
                if (ret < 0) {
 
82
                        SYSERROR("failed to lseek on file '%s'", freezer);
 
83
                        goto out;
 
84
                }
 
85
 
 
86
                ret = read(fd, tmpf, sizeof(tmpf));
 
87
                if (ret < 0) {
 
88
                        SYSERROR("failed to read to '%s'", freezer);
 
89
                        goto out;
 
90
                }
 
91
 
 
92
                ret = strncmp(f, tmpf, strlen(f));
 
93
                if (!ret)
 
94
                        break;          /* Success */
 
95
 
 
96
                sleep(1);
 
97
 
 
98
                ret = lseek(fd, 0L, SEEK_SET);
 
99
                if (ret < 0) {
 
100
                        SYSERROR("failed to lseek on file '%s'", freezer);
 
101
                        goto out;
 
102
                }
 
103
 
 
104
                ret = write(fd, f, strlen(f) + 1);
 
105
                if (ret < 0) {
 
106
                        SYSERROR("failed to write '%s' to '%s'", f, freezer);
 
107
                        goto out;
 
108
                }
 
109
        }
 
110
 
 
111
out:
73
112
        close(fd);
74
 
        if (ret) 
75
 
                SYSERROR("failed to write to '%s'", freezer);
76
 
 
77
113
        return ret;
78
114
}
79
115