X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4dc49c9d77bc2dcba754a985c4c03e02c4b737fd..4141cd9660259caa66e2e9af10873e53402b4812:/src/simix/smx_io.cpp diff --git a/src/simix/smx_io.cpp b/src/simix/smx_io.cpp index 98d4b230d4..4b8ecbc42f 100644 --- a/src/simix/smx_io.cpp +++ b/src/simix/smx_io.cpp @@ -1,12 +1,12 @@ -/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved. */ /* 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 "mc/mc.h" +#include "simgrid/Exception.hpp" #include "simgrid/s4u/Host.hpp" #include "simgrid/s4u/Io.hpp" -#include "xbt/ex.hpp" #include "smx_private.hpp" #include "src/kernel/activity/IoImpl.hpp" @@ -16,21 +16,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_io, simix, "Logging specific to SIMIX (io)"); -simgrid::kernel::activity::IoImplPtr SIMIX_io_start(std::string name, sg_size_t size, sg_storage_t storage, - simgrid::s4u::Io::OpType type) -{ - /* set surf's action */ - simgrid::kernel::resource::Action* surf_action = storage->get_impl()->io_start(size, type); - - simgrid::kernel::activity::IoImplPtr io = - simgrid::kernel::activity::IoImplPtr(new simgrid::kernel::activity::IoImpl(name, surf_action, storage)); - - XBT_DEBUG("Create IO synchro %p %s", io.get(), name.c_str()); - simgrid::kernel::activity::IoImpl::on_creation(io); - - return io; -} - void simcall_HANDLER_io_wait(smx_simcall_t simcall, smx_activity_t synchro) { XBT_DEBUG("Wait for execution of synchro %p, state %d", synchro.get(), (int)synchro->state_); @@ -59,20 +44,21 @@ void SIMIX_io_finish(smx_activity_t synchro) /* do nothing, synchro done */ break; case SIMIX_FAILED: - SMX_EXCEPTION(simcall->issuer, io_error, 0, "IO failed"); + simcall->issuer->exception_ = + std::make_exception_ptr(simgrid::StorageFailureException(XBT_THROW_POINT, "Storage failed")); break; case SIMIX_CANCELED: - SMX_EXCEPTION(simcall->issuer, cancel_error, 0, "Canceled"); + simcall->issuer->exception_ = + std::make_exception_ptr(simgrid::CancelException(XBT_THROW_POINT, "I/O Canceled")); break; default: xbt_die("Internal error in SIMIX_io_finish: unexpected synchro state %d", static_cast(synchro->state_)); } - if (simcall->issuer->host_->is_off()) { - simcall->issuer->context_->iwannadie = 1; - } - simcall->issuer->waiting_synchro = nullptr; - SIMIX_simcall_answer(simcall); + if (simcall->issuer->get_host()->is_on()) + SIMIX_simcall_answer(simcall); + else + simcall->issuer->context_->iwannadie = true; } }