X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/444fd32bb5976fd3fd81197e6c321f21a5ed34b2..f4a258218681d1002c99d4556ba4b21bc6a6adff:/src/msg/task.c diff --git a/src/msg/task.c b/src/msg/task.c index 84d6f90b38..e1f3f7a850 100644 --- a/src/msg/task.c +++ b/src/msg/task.c @@ -45,12 +45,11 @@ m_task_t MSG_task_create(const char *name, double compute_duration, double message_size, void *data) { - simdata_task_t simdata = xbt_new0(s_simdata_task_t,1); - m_task_t task = xbt_new0(s_m_task_t,1); + m_task_t task = xbt_mallocator_get(msg_global->task_mallocator); + simdata_task_t simdata = task->simdata; /* Task structure */ task->name = xbt_strdup(name); - task->simdata = simdata; task->data = data; /* Simulator Data */ @@ -121,7 +120,6 @@ const char *MSG_task_get_name(m_task_t task) MSG_error_t MSG_task_destroy(m_task_t task) { surf_action_t action = NULL; - xbt_assert0((task != NULL), "Invalid parameter"); task->simdata->using--; @@ -140,9 +138,7 @@ MSG_error_t MSG_task_destroy(m_task_t task) if(action) action->resource_type->common_public->action_free(action); if(task->simdata->host_list) xbt_free(task->simdata->host_list); - free(task->simdata); - free(task); - + xbt_mallocator_release(msg_global->task_mallocator, task); return MSG_OK; } @@ -238,3 +234,24 @@ void MSG_task_set_priority(m_task_t task, double priority) { surf_workstation_resource->common_public-> set_priority(task->simdata->compute, task->simdata->priority); } + +/* Mallocator functions */ +m_task_t task_mallocator_new_f(void) { + m_task_t task = xbt_new(s_m_task_t, 1); + simdata_task_t simdata = xbt_new0(s_simdata_task_t, 1); + task->simdata = simdata; + return task; +} + +void task_mallocator_free_f(m_task_t task) { + xbt_assert0((task != NULL), "Invalid parameter"); + + xbt_free(task->simdata); + xbt_free(task); + + return; +} + +void task_mallocator_reset_f(m_task_t task) { + memset(task->simdata, 0, sizeof(s_simdata_task_t)); +}