return action;
}
+static surf_action_t storage_action_unlink(void *storage, surf_file_t stream)
+{
+ surf_action_t action = storage_action_execute(storage,0, UNLINK);
+
+ // Add memory to storage
+ ((storage_t)storage)->used_size -= stream->content->stat.size;
+
+ // Remove the file from storage
+ xbt_dict_t content_dict = ((storage_t)storage)->content;
+ xbt_dict_remove(content_dict,stream->name);
+
+ free(stream->name);
+ stream->content = NULL;
+ xbt_free(stream);
+
+ return action;
+}
+
static surf_action_t storage_action_open(void *storage, const char* mount, const char* path, const char* mode)
{
XBT_DEBUG("\tOpen file '%s'",path);
case OPEN:
case CLOSE:
case STAT:
+ case UNLINK:
break;
case READ:
lmm_expand(storage_maxmin_system, STORAGE->constraint_read,
lmm_expand(storage_maxmin_system, STORAGE->constraint_write,
GENERIC_LMM_ACTION(action).variable, 1.0);
xbt_dynar_push(((storage_t)storage)->write_actions,&action);
-
break;
}
action->type = type;
storage_type->properties,
Bread);
- if(!storage_list) storage_list=xbt_dynar_new(sizeof(char *),free);
+ if(!storage_list) storage_list=xbt_dynar_new(sizeof(char *),NULL);
xbt_dynar_push(storage_list,&storage);
return storage;
surf_model_exit(surf_storage_model);
surf_storage_model = NULL;
+ if(storage_list)
+ xbt_dynar_free(&storage_list);
+
xbt_swag_free
(storage_running_action_set_that_does_not_need_being_checked);
storage_running_action_set_that_does_not_need_being_checked = NULL;
surf_storage_model->extension.storage.read = storage_action_read;
surf_storage_model->extension.storage.write = storage_action_write;
surf_storage_model->extension.storage.stat = storage_action_stat;
+ surf_storage_model->extension.storage.unlink = storage_action_unlink;
surf_storage_model->extension.storage.create_resource = storage_create_resource;
if (!storage_maxmin_system) {
// specific to storage
storage_t storage = r;
xbt_dict_free(&storage->content);
+ xbt_dynar_free(&storage->write_actions);
// generic resource
surf_resource_free(r);
}