When no nbproc is specified, a computation leads to reading bind_thread[-1]
before checking if the thread mask is valid for a bind conf. It may either
report a false warning and compute a wrong mask, or miss some incorrect
configs.
This must be backported to 1.9 and possibly 1.8.
/* detect and address thread affinity inconsistencies */
nbproc = 0;
if (bind_conf->bind_proc)
- nbproc = my_ffsl(bind_conf->bind_proc);
+ nbproc = my_ffsl(bind_conf->bind_proc) - 1;
- mask = bind_conf->bind_thread[nbproc - 1];
+ mask = bind_conf->bind_thread[nbproc];
if (mask && !(mask & all_threads_mask)) {
unsigned long new_mask = 0;