/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-#include "private.h"
+#include "smx_private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/dict.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_io, simix,
"Logging specific to SIMIX (io)");
-void SIMIX_pre_file_read(smx_req_t req)
+void SIMIX_pre_file_read(smx_simcall_t simcall)
{
- smx_action_t action = SIMIX_file_read(req->issuer, req->file_read.name);
- xbt_fifo_push(action->request_list, req);
- req->issuer->waiting_action = action;
+ smx_action_t action = SIMIX_file_read(simcall->issuer, simcall->file_read.name);
+ xbt_fifo_push(action->simcalls, simcall);
+ simcall->issuer->waiting_action = action;
}
smx_action_t SIMIX_file_read(smx_process_t process, char* name)
action->io.host = host;
// TODO in surf model disk???
// action->io.surf_io = surf_workstation_model->extension.disk.read(host->host, name),
- action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 1.0);
+ action->io.surf_io = surf_workstation_model->extension.workstation.sleep(host->host, 1.0);
surf_workstation_model->action_data_set(action->io.surf_io, action);
XBT_DEBUG("Create io action %p", action);
return action;
}
-void SIMIX_post_file_read(smx_action_t action)
+void SIMIX_post_io(smx_action_t action)
{
- smx_req_t req;
+ switch (surf_workstation_model->action_state_get(action->io.surf_io)) {
- while ((req = xbt_fifo_shift(action->request_list))) {
-
- switch(surf_workstation_model->action_state_get(action->io.surf_io)){
case SURF_ACTION_FAILED:
action->state = SIMIX_FAILED;
break;
default:
THROW_IMPOSSIBLE;
break;
- }
}
- /* If there are requests associated with the action, then answer them */
- if (xbt_fifo_size(action->request_list))
- SIMIX_io_finish(action);
+
+ SIMIX_io_finish(action);
}
void SIMIX_io_destroy(smx_action_t action)
void SIMIX_io_finish(smx_action_t action)
{
volatile xbt_fifo_item_t item;
- smx_req_t req;
+ smx_simcall_t simcall;
- xbt_fifo_foreach(action->request_list, item, req, smx_req_t) {
+ xbt_fifo_foreach(action->simcalls, item, simcall, smx_simcall_t) {
switch (action->state) {
TRY {
THROWF(io_error, 0, "IO failed");
}
- CATCH(req->issuer->running_ctx->exception) {
- req->issuer->doexception = 1;
+ CATCH(simcall->issuer->running_ctx->exception) {
+ simcall->issuer->doexception = 1;
}
break;
TRY {
THROWF(cancel_error, 0, "Canceled");
}
- CATCH(req->issuer->running_ctx->exception) {
- req->issuer->doexception = 1;
+ CATCH(simcall->issuer->running_ctx->exception) {
+ simcall->issuer->doexception = 1;
}
break;
xbt_die("Internal error in SIMIX_io_finish: unexpected action state %d",
action->state);
}
- req->issuer->waiting_action = NULL;
- SIMIX_request_answer(req);
+ simcall->issuer->waiting_action = NULL;
+ SIMIX_simcall_answer(simcall);
}
/* We no longer need it */