If QUICK_THREADS is not defined (it is not by default, but most
distributions enable it) and task_dir_missing is true (only on very old
kernels), then readtask() forgets to reset some of the struct proc_t t's
members, which later results in double-free()s in free_acquired().
For now, we simply synchronized the list of members to be reset with the
list of members freed in free_acquired().
#ifdef QUICK_THREADS
MK_THREAD(t);
#else
- t->environ = NULL;
- t->cmdline = vectorize_this_str("n/a");
- t->cgroup = NULL;
- t->supgid = NULL;
- t->supgrp = NULL;
+ t->environ = NULL;
+ t->cmdline = vectorize_this_str("n/a");
+ t->cgroup = NULL;
+ t->cgname = NULL;
+ t->supgid = NULL;
+ t->supgrp = NULL;
+ t->sd_mach = NULL;
+ t->sd_ouid = NULL;
+ t->sd_seat = NULL;
+ t->sd_sess = NULL;
+ t->sd_slice = NULL;
+ t->sd_unit = NULL;
+ t->sd_uunit = NULL;
#endif
return t;
}