Cleanup how we handle pointer arrays in the odls base fns to avoid potential segfaults
This commit was SVN r21423.
Этот коммит содержится в:
родитель
89b7e20a8b
Коммит
1ee4acb247
@ -83,7 +83,7 @@ int orte_odls_base_default_get_add_procs_data(opal_buffer_t *data,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
orte_job_t *jdata;
|
orte_job_t *jdata;
|
||||||
orte_proc_t **procs;
|
orte_proc_t *proc;
|
||||||
orte_job_map_t *map;
|
orte_job_map_t *map;
|
||||||
opal_buffer_t *wireup;
|
opal_buffer_t *wireup;
|
||||||
opal_byte_object_t bo, *boptr;
|
opal_byte_object_t bo, *boptr;
|
||||||
@ -91,6 +91,7 @@ int orte_odls_base_default_get_add_procs_data(opal_buffer_t *data,
|
|||||||
int8_t flag;
|
int8_t flag;
|
||||||
int8_t *tmp;
|
int8_t *tmp;
|
||||||
orte_vpid_t i;
|
orte_vpid_t i;
|
||||||
|
int j;
|
||||||
orte_daemon_cmd_flag_t command;
|
orte_daemon_cmd_flag_t command;
|
||||||
|
|
||||||
/* get the job data pointer */
|
/* get the job data pointer */
|
||||||
@ -98,7 +99,6 @@ int orte_odls_base_default_get_add_procs_data(opal_buffer_t *data,
|
|||||||
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
|
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
|
||||||
return ORTE_ERR_BAD_PARAM;
|
return ORTE_ERR_BAD_PARAM;
|
||||||
}
|
}
|
||||||
procs = (orte_proc_t**)jdata->procs->addr;
|
|
||||||
|
|
||||||
/* get a pointer to the job map */
|
/* get a pointer to the job map */
|
||||||
map = jdata->map;
|
map = jdata->map;
|
||||||
@ -266,8 +266,11 @@ int orte_odls_base_default_get_add_procs_data(opal_buffer_t *data,
|
|||||||
|
|
||||||
/* transfer and pack the app_idx array for this job in one pack */
|
/* transfer and pack the app_idx array for this job in one pack */
|
||||||
tmp = (int8_t*)malloc(jdata->num_procs);
|
tmp = (int8_t*)malloc(jdata->num_procs);
|
||||||
for (i=0; i < jdata->num_procs; i++) {
|
for (j=0, i=0; i < jdata->num_procs && j < jdata->procs->size; j++) {
|
||||||
tmp[i] = procs[i]->app_idx;
|
if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(jdata->procs, j))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
tmp[i++] = proc->app_idx;
|
||||||
}
|
}
|
||||||
if (ORTE_SUCCESS != (rc = opal_dss.pack(data, tmp, jdata->num_procs, OPAL_INT8))) {
|
if (ORTE_SUCCESS != (rc = opal_dss.pack(data, tmp, jdata->num_procs, OPAL_INT8))) {
|
||||||
ORTE_ERROR_LOG(rc);
|
ORTE_ERROR_LOG(rc);
|
||||||
@ -282,11 +285,15 @@ int orte_odls_base_default_get_add_procs_data(opal_buffer_t *data,
|
|||||||
ORTE_ERROR_LOG(rc);
|
ORTE_ERROR_LOG(rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
for (i=0; i < jdata->num_procs; i++) {
|
for (j=0, i=0; i < jdata->num_procs && j < jdata->procs->size; j++) {
|
||||||
if (ORTE_SUCCESS != (rc = opal_dss.pack(data, &procs[i]->slot_list, 1, OPAL_STRING))) {
|
if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(jdata->procs, j))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ORTE_SUCCESS != (rc = opal_dss.pack(data, &proc->slot_list, 1, OPAL_STRING))) {
|
||||||
ORTE_ERROR_LOG(rc);
|
ORTE_ERROR_LOG(rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
flag = (int8_t)false;
|
flag = (int8_t)false;
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user