msg_global->current_process = NULL;
msg_global->registered_functions = xbt_dict_new();
msg_global->PID = 1;
+ msg_global->task_mallocator = xbt_mallocator_new(256,
+ (pvoid_f_void_t*) task_mallocator_new_f,
+ (void_f_pvoid_t*) task_mallocator_free_f,
+ (void_f_pvoid_t*) task_mallocator_reset_f);
}
}
xbt_fifo_free(msg_global->process_to_run);
xbt_fifo_free(msg_global->process_list);
xbt_dict_free(&(msg_global->registered_functions));
+ xbt_mallocator_free(msg_global->task_mallocator);
if(msg_global->paje_output) {
fclose(msg_global->paje_output);
#include "xbt/dict.h"
#include "xbt/context.h"
#include "xbt/config.h"
+#include "xbt/mallocator.h"
/**************** datatypes **********************************/
int paje_maxPID;
int PID;
int session;
+ xbt_mallocator_t task_mallocator;
+ xbt_mallocator_t task_simdata_mallocator;
} s_MSG_Global_t, *MSG_Global_t;
extern MSG_Global_t msg_global;
void __MSG_display_process_status(void);
+m_task_t task_mallocator_new_f(void);
+void task_mallocator_free_f(m_task_t task);
+void task_mallocator_reset_f(m_task_t task);
+
#ifdef ALVIN_SPECIAL_LOGING
#define PAJE_PROCESS_STATE(process,state)\
if(msg_global->paje_output) \
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));
+}