corresponding object.
* \param name a name for the object. It is for user-level information
and can be NULL.
- * \param compute_duration a value of the processing amount (in Mflop)
+ * \param compute_duration a value of the processing amount (in flop)
needed to process this new task. If 0, then it cannot be executed with
MSG_task_execute(). This value has to be >=0.
- * \param message_size a value of the amount of data (in Mb) needed to
+ * \param message_size a value of the amount of data (in bytes) needed to
transfer this new task. If 0, then it cannot be transfered with
MSG_task_get() and MSG_task_put(). This value has to be >=0.
* \param data a pointer to any data may want to attach to the new
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 */
MSG_error_t MSG_task_destroy(m_task_t task)
{
surf_action_t action = NULL;
-
xbt_assert0((task != NULL), "Invalid parameter");
task->simdata->using--;
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;
}
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));
+}