-/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
+/* Copyright (c) 2007-2010, 2012-2013. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
return xbt_lib_get_or_null(storage_lib, name, SIMIX_STORAGE_LEVEL);
}
+/**
+ * \brief Internal function to destroy a SIMIX storage.
+ *
+ * \param s the host to destroy (a smx_storage_t)
+ */
+void SIMIX_storage_destroy(void *s)
+{
+ smx_storage_priv_t storage = (smx_storage_priv_t) s;
+
+ xbt_assert((storage != NULL), "Invalid parameters");
+ if (storage->data)
+ free(storage->data);
+
+ /* Clean storage structure */
+ free(storage);
+}
void* SIMIX_pre_file_get_data(smx_simcall_t simcall,smx_file_t fd){
return SIMIX_file_get_data(fd);
}
//SIMIX FILE READ
-void SIMIX_pre_file_read(smx_simcall_t simcall, size_t size,
- smx_file_t fd)
+void SIMIX_pre_file_read(smx_simcall_t simcall, smx_file_t fd, sg_storage_size_t size)
{
- smx_action_t action = SIMIX_file_read(simcall->issuer, size, fd);
+ smx_action_t action = SIMIX_file_read(simcall->issuer, fd, size);
xbt_fifo_push(action->simcalls, simcall);
simcall->issuer->waiting_action = action;
}
-smx_action_t SIMIX_file_read(smx_process_t process, size_t size,
- smx_file_t fd)
+smx_action_t SIMIX_file_read(smx_process_t process, smx_file_t fd, sg_storage_size_t size)
{
smx_action_t action;
smx_host_t host = process->smx_host;
action->io.host = host;
action->io.surf_io =
- surf_workstation_model->extension.workstation.read(host, size,
- fd->surf_file);
+ surf_workstation_model->extension.workstation.read(host, fd->surf_file, size);
surf_workstation_model->action_data_set(action->io.surf_io, action);
XBT_DEBUG("Create io action %p", action);
}
//SIMIX FILE WRITE
-void SIMIX_pre_file_write(smx_simcall_t simcall, size_t size,
- smx_file_t fd)
+void SIMIX_pre_file_write(smx_simcall_t simcall, smx_file_t fd, sg_storage_size_t size)
{
- smx_action_t action = SIMIX_file_write(simcall->issuer, size, fd);
+ smx_action_t action = SIMIX_file_write(simcall->issuer, fd, size);
xbt_fifo_push(action->simcalls, simcall);
simcall->issuer->waiting_action = action;
}
-smx_action_t SIMIX_file_write(smx_process_t process,
- size_t size, smx_file_t fd)
+smx_action_t SIMIX_file_write(smx_process_t process, smx_file_t fd, sg_storage_size_t size)
{
smx_action_t action;
smx_host_t host = process->smx_host;
action->io.host = host;
action->io.surf_io =
- surf_workstation_model->extension.workstation.write(host, size,
- fd->surf_file);
+ surf_workstation_model->extension.workstation.write(host, fd->surf_file, size);
surf_workstation_model->action_data_set(action->io.surf_io, action);
XBT_DEBUG("Create io action %p", action);
}
if (surf_workstation_model->extension.workstation.unlink(host, fd->surf_file)){
- fd->surf_file = NULL;
+ xbt_free(fd);
return 1;
} else
return 0;
return action;
}
-size_t SIMIX_pre_file_get_size(smx_simcall_t simcall, smx_file_t fd)
+sg_storage_size_t SIMIX_pre_file_get_size(smx_simcall_t simcall, smx_file_t fd)
{
return SIMIX_file_get_size(simcall->issuer, fd);
}
-size_t SIMIX_file_get_size(smx_process_t process, smx_file_t fd)
+sg_storage_size_t SIMIX_file_get_size(smx_process_t process, smx_file_t fd)
{
smx_host_t host = process->smx_host;
return surf_workstation_model->extension.workstation.get_size(host,
fd->surf_file);
}
-size_t SIMIX_pre_storage_get_free_size(smx_simcall_t simcall, const char* name)
+sg_storage_size_t SIMIX_pre_storage_get_free_size(smx_simcall_t simcall, const char* name)
{
return SIMIX_storage_get_free_size(simcall->issuer, name);
}
-size_t SIMIX_storage_get_free_size(smx_process_t process, const char* name)
+sg_storage_size_t SIMIX_storage_get_free_size(smx_process_t process, const char* name)
{
smx_host_t host = process->smx_host;
return surf_workstation_model->extension.workstation.get_free_size(host,name);
}
-size_t SIMIX_pre_storage_get_used_size(smx_simcall_t simcall, const char* name)
+sg_storage_size_t SIMIX_pre_storage_get_used_size(smx_simcall_t simcall, const char* name)
{
return SIMIX_storage_get_used_size(simcall->issuer, name);
}
-size_t SIMIX_storage_get_used_size(smx_process_t process, const char* name)
+sg_storage_size_t SIMIX_storage_get_used_size(smx_process_t process, const char* name)
{
smx_host_t host = process->smx_host;
return surf_workstation_model->extension.workstation.get_used_size(host,name);
return surf_storage_model->extension.storage.get_content(storage);
}
+sg_storage_size_t SIMIX_storage_get_size(smx_storage_t storage){
+ xbt_assert((storage != NULL), "Invalid parameters (simix storage is NULL)");
+ return surf_storage_model->extension.storage.get_size(storage);
+}
+
void SIMIX_post_io(smx_action_t action)
{
xbt_fifo_item_t i;