X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/da7e15623cc3e43bd5b30848b1b2283af9470b5c..c72411932647b614f98e2db41c2daacf0e9bc43c:/src/msg/task.c
diff --git a/src/msg/task.c b/src/msg/task.c
index b6c608a871..e0d880f8e4 100644
--- a/src/msg/task.c
+++ b/src/msg/task.c
@@ -8,13 +8,12 @@
#include "private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(task, msg,
- "Logging specific to MSG (task)");
/** \defgroup m_task_management Managing functions of Tasks
* \brief This section describes the task structure of MSG
* (#m_task_t) and the functions for managing it.
- *
+ * \htmlonly \endhtmlonly
+ *
* Since most scheduling algorithms rely on a concept of task
* that can be either computed locally or
* transferred on another processor, it seems to be the
@@ -31,10 +30,10 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(task, msg,
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
@@ -46,12 +45,11 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(task, msg,
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 */
@@ -122,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--;
@@ -141,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;
}
@@ -239,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));
+}