#include "xbt/sysdep.h"
#include "surf/surf.h"
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_workstation, sd,
+ "Logging specific to SimDag (workstation)");
+
/* Creates a workstation and registers it in SD.
*/
SD_workstation_t __SD_workstation_create(void *surf_workstation, void *data) {
SD_CHECK_INIT_DONE();
xbt_assert0(surf_workstation != NULL, "surf_workstation is NULL !");
- SD_workstation_t workstation = xbt_new0(s_SD_workstation_t, 1);
+ SD_workstation_t workstation = xbt_new(s_SD_workstation_t, 1);
workstation->surf_workstation = surf_workstation;
workstation->data = data; /* user data */
- SD_workstation_set_access_mode(workstation, SD_WORKSTATION_SHARED_ACCESS); /* default mode is shared */
+ workstation->access_mode = SD_WORKSTATION_SHARED_ACCESS; /* default mode is shared */
workstation->task_fifo = NULL;
+ workstation->current_task = NULL;
const char *name = SD_workstation_get_name(workstation);
xbt_dict_set(sd_global->workstations, name, workstation, __SD_workstation_destroy); /* add the workstation to the dictionary */
int i;
if (sd_global->workstation_list == NULL) { /* this is the first time the function is called */
- sd_global->workstation_list = xbt_new0(SD_workstation_t, sd_global->workstation_count);
+ sd_global->workstation_list = xbt_new(SD_workstation_t, sd_global->workstation_count);
i = 0;
xbt_dict_foreach(sd_global->workstations, cursor, key, data) {
const SD_link_t* SD_route_get_list(SD_workstation_t src, SD_workstation_t dst) {
SD_CHECK_INIT_DONE();
- static int first_run = 1;
-
- if (first_run) {
- sd_global->recyclable_route = xbt_new0(SD_link_t, SD_link_get_number());
- first_run = 0;
+ if (sd_global->recyclable_route == NULL) {
+ /* first run */
+ sd_global->recyclable_route = xbt_new(SD_link_t, SD_link_get_number());
}
void *surf_src = src->surf_workstation;
SD_CHECK_INIT_DONE();
xbt_assert0(workstation != NULL, "Invalid parameter");
+ DEBUG4("Workstation '%s' access mode: %d, current task: %s, fifo size: %d",
+ SD_workstation_get_name(workstation),
+ workstation->access_mode,
+ (workstation->current_task ? SD_task_get_name(workstation->current_task) : "none"),
+ (workstation->task_fifo ? xbt_fifo_size(workstation->task_fifo) : 0));
+
return workstation->access_mode == SD_WORKSTATION_SEQUENTIAL_ACCESS &&
(workstation->current_task != NULL || xbt_fifo_size(workstation->task_fifo) > 0);
}