X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0d926831703326eda8eca16f898e892466d8d16a..7cd340efbc715f664696ac58ff38a072f1b6b2fe:/src/simix/smx_io.c diff --git a/src/simix/smx_io.c b/src/simix/smx_io.c index e96222564a..040495e553 100644 --- a/src/simix/smx_io.c +++ b/src/simix/smx_io.c @@ -47,7 +47,7 @@ smx_action_t SIMIX_file_read(smx_process_t process, const char* storage, void* p #endif action->io.host = host; - action->io.surf_io = surf_workstation_model->extension.workstation.read(host->host, storage, ptr, size, nmemb, (surf_file_t)stream), + action->io.surf_io = surf_workstation_model->extension.workstation.read(host->host, storage, ptr, size, nmemb, stream->surf_file), surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -88,7 +88,7 @@ smx_action_t SIMIX_file_write(smx_process_t process, const char* storage, const #endif action->io.host = host; - action->io.surf_io = surf_workstation_model->extension.workstation.write(host->host, storage, ptr, size, nmemb, (surf_file_t)stream); + action->io.surf_io = surf_workstation_model->extension.workstation.write(host->host, storage, ptr, size, nmemb, stream->surf_file); surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -165,7 +165,7 @@ smx_action_t SIMIX_file_close(smx_process_t process ,const char* storage, smx_fi #endif action->io.host = host; - action->io.surf_io = surf_workstation_model->extension.workstation.close(host->host, storage, (surf_file_t)fp); + action->io.surf_io = surf_workstation_model->extension.workstation.close(host->host, storage, fp->surf_file); surf_workstation_model->action_data_set(action->io.surf_io, action); XBT_DEBUG("Create io action %p", action); @@ -214,6 +214,32 @@ smx_action_t SIMIX_file_stat(smx_process_t process ,const char* storage, int fd, void SIMIX_post_io(smx_action_t action) { + xbt_fifo_item_t i; + smx_simcall_t simcall; + + xbt_fifo_foreach(action->simcalls,i,simcall,smx_simcall_t) { + switch (simcall->call) { + case SIMCALL_FILE_OPEN: + simcall->file_open.result = xbt_new(s_smx_file_t,1); + simcall->file_open.result->surf_file = (action->io.surf_io)->file; + break; + case SIMCALL_FILE_CLOSE: + simcall->file_read.result = 0; + break; + case SIMCALL_FILE_WRITE: + simcall->file_write.result = (action->io.surf_io)->cost; + break; + case SIMCALL_FILE_READ: + simcall->file_read.result = (action->io.surf_io)->cost; + break; + case SIMCALL_FILE_STAT: + simcall->file_read.result = 0; + break; + default: + break; + } + } + switch (surf_workstation_model->action_state_get(action->io.surf_io)) { case SURF_ACTION_FAILED: