diff --git a/src/slurmd/common/slurmd_cgroup.c b/src/slurmd/common/slurmd_cgroup.c index 740f7baf3edbb07806786b61636496edb83d960e..90f692f405a5aa485873394a62c5eb1e6f6106f0 100644 --- a/src/slurmd/common/slurmd_cgroup.c +++ b/src/slurmd/common/slurmd_cgroup.c @@ -100,7 +100,6 @@ extern int init_system_cpuset_cgroup(void) { int rc; int fstatus = SLURM_ERROR; - xcgroup_t cpuset_cg; char* cpus = NULL; size_t cpus_size; char* slurm_cgpath; @@ -121,6 +120,8 @@ extern int init_system_cpuset_cgroup(void) /* create slurm root cg in this cg namespace */ slurm_cgpath = _system_cgroup_create_slurm_cg(&cpuset_ns); if ( slurm_cgpath == NULL ) { + xcgroup_ns_destroy(&cpuset_ns); + free_slurm_cgroup_conf(&slurm_cgroup_conf); return SLURM_ERROR; } @@ -129,6 +130,7 @@ extern int init_system_cpuset_cgroup(void) != XCGROUP_SUCCESS) { error("system cgroup: unable to load slurm cpuset xcgroup"); xfree(slurm_cgpath); + xcgroup_ns_destroy(&cpuset_ns); free_slurm_cgroup_conf(&slurm_cgroup_conf); return SLURM_ERROR; } @@ -147,7 +149,9 @@ again: if (_xcgroup_cpuset_init(&slurm_cg) != XCGROUP_SUCCESS) { xfree(slurm_cgpath); xcgroup_destroy(&slurm_cg); + xcgroup_ns_destroy(&cpuset_ns); free_slurm_cgroup_conf(&slurm_cgroup_conf); + xfree(cpus); return SLURM_ERROR; } } @@ -164,11 +168,9 @@ again: goto error; } if (xcgroup_instanciate(&system_cpuset_cg) != XCGROUP_SUCCESS) { - xcgroup_destroy(&system_cpuset_cg); goto error; } if (_xcgroup_cpuset_init(&system_cpuset_cg) != XCGROUP_SUCCESS) { - xcgroup_destroy(&system_cpuset_cg); goto error; } @@ -177,7 +179,9 @@ again: return SLURM_SUCCESS; error: - xcgroup_unlock(&cpuset_cg); + xcgroup_unlock(&system_cpuset_cg); + xcgroup_destroy(&system_cpuset_cg); + xcgroup_ns_destroy(&cpuset_ns); free_slurm_cgroup_conf(&slurm_cgroup_conf); return fstatus; } @@ -185,7 +189,6 @@ error: extern int init_system_memory_cgroup(void) { int fstatus = SLURM_ERROR; - xcgroup_t memory_cg; char* slurm_cgpath; /* read cgroup configuration */ @@ -255,6 +258,7 @@ extern int init_system_memory_cgroup(void) /* create slurm root cg in this cg namespace */ slurm_cgpath = _system_cgroup_create_slurm_cg(&memory_ns); if ( slurm_cgpath == NULL ) { + xcgroup_ns_destroy(&memory_ns); free_slurm_cgroup_conf(&slurm_cgroup_conf); return SLURM_ERROR; } @@ -270,7 +274,6 @@ extern int init_system_memory_cgroup(void) goto error; } if (xcgroup_instanciate(&system_memory_cg) != XCGROUP_SUCCESS) { - xcgroup_destroy(&system_memory_cg); goto error; } @@ -278,7 +281,6 @@ extern int init_system_memory_cgroup(void) != XCGROUP_SUCCESS ) { error("system cgroup: unable to ask for hierarchical accounting" "of system memcg '%s'", system_memory_cg.path); - xcgroup_destroy (&system_memory_cg); goto error; } @@ -287,8 +289,9 @@ extern int init_system_memory_cgroup(void) return SLURM_SUCCESS; error: - xcgroup_unlock(&memory_cg); - xcgroup_destroy(&memory_cg); + xcgroup_unlock(&system_memory_cg); + xcgroup_destroy(&system_memory_cg); + xcgroup_ns_destroy(&memory_ns); free_slurm_cgroup_conf(&slurm_cgroup_conf); return fstatus; } diff --git a/src/slurmd/slurmd/slurmd.c b/src/slurmd/slurmd/slurmd.c index 59265b585ac6a009d77be3467347f8c6e713fe1e..6a53aae8b1e4b398a5f5b88129a13430303f51b0 100644 --- a/src/slurmd/slurmd/slurmd.c +++ b/src/slurmd/slurmd/slurmd.c @@ -638,7 +638,10 @@ _fill_registration_msg(slurm_node_registration_status_msg_t *msg) msg->sockets = conf->sockets; msg->cores = conf->cores; msg->threads = conf->threads; - msg->cpu_spec_list = xstrdup (res_abs_cpus); + if (res_abs_cpus[0] == '\0') + msg->cpu_spec_list = NULL; + else + msg->cpu_spec_list = xstrdup (res_abs_cpus); msg->real_memory = conf->real_memory_size; msg->tmp_disk = conf->tmp_disk_space; msg->hash_val = slurm_get_hash_val(); @@ -1981,6 +1984,7 @@ static int _core_spec_init(void) res_abs_cores = xmalloc(ncores * 4 * sizeof(char)); res_core_bitmap = bit_alloc(ncores); res_cpu_bitmap = bit_alloc(ncpus); + res_abs_cpus[0] = '\0'; if (conf->cpu_spec_list != NULL) { /* CPUSpecList designated in slurm.conf */