|
@@ -193,17 +193,21 @@ void _starpu_task_insert_check_nb_buffers(struct starpu_codelet *cl, struct star
|
|
|
{
|
|
|
(*task)->dyn_handles[i] = (*task)->handles[i];
|
|
|
}
|
|
|
- (*task)->dyn_modes = malloc(*allocated_buffers * sizeof(enum starpu_data_access_mode));
|
|
|
- for(i=0 ; i<nbuffers ; i++)
|
|
|
+ if ((*task)->cl->nbuffers == STARPU_VARIABLE_NBUFFERS)
|
|
|
{
|
|
|
- (*task)->dyn_modes[i] = ((*task)->cl->nbuffers == STARPU_VARIABLE_NBUFFERS) ? (*task)->modes[i] : STARPU_CODELET_GET_MODE((*task)->cl, i);
|
|
|
+ (*task)->dyn_modes = malloc(*allocated_buffers * sizeof(enum starpu_data_access_mode));
|
|
|
+ for(i=0 ; i<nbuffers ; i++)
|
|
|
+ {
|
|
|
+ (*task)->dyn_modes[i] = (*task)->modes[i];
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+ else if (nbuffers >= *allocated_buffers)
|
|
|
{
|
|
|
*allocated_buffers *= 2;
|
|
|
(*task)->dyn_handles = realloc((*task)->dyn_handles, *allocated_buffers * sizeof(starpu_data_handle_t));
|
|
|
- (*task)->dyn_modes = realloc((*task)->dyn_modes, *allocated_buffers * sizeof(enum starpu_data_access_mode));
|
|
|
+ if (nbuffers == STARPU_VARIABLE_NBUFFERS)
|
|
|
+ (*task)->dyn_modes = realloc((*task)->dyn_modes, *allocated_buffers * sizeof(enum starpu_data_access_mode));
|
|
|
}
|
|
|
}
|
|
|
}
|