X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f734ec7475682eb90323e804cbcfddd7e4523992..6ae5ae138e9dd397b95d9e7741a5b28f194705d0:/src/mc/remote/Client.cpp diff --git a/src/mc/remote/Client.cpp b/src/mc/remote/Client.cpp index 362a3cd64d..4a9f0bf79c 100644 --- a/src/mc/remote/Client.cpp +++ b/src/mc/remote/Client.cpp @@ -1,30 +1,18 @@ -/* Copyright (c) 2015-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-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 -#include +#include "src/mc/remote/Client.hpp" +#include "src/internal_config.h" +#include +#include -#include +#include +#include #include #include -#include -#include -#include -#include - -#include - -#include "src/internal_config.h" - -#include "src/mc/mc_request.hpp" -#include "src/mc/remote/Client.hpp" -#include "src/mc/remote/mc_protocol.h" - -#include "src/smpi/include/private.hpp" - // We won't need those once the separation MCer/MCed is complete: #include "src/mc/mc_smx.hpp" @@ -65,25 +53,17 @@ Client* Client::initialize() xbt_die("Unexpected socket type %i", type); XBT_DEBUG("Model-checked application found expected socket type"); - instance_ = std::unique_ptr(new simgrid::mc::Client(fd)); + instance_.reset(new simgrid::mc::Client(fd)); // Wait for the model-checker: - errno = 0; -#if defined __linux__ - ptrace(PTRACE_TRACEME, 0, nullptr, nullptr); -#elif defined BSD - ptrace(PT_TRACE_ME, 0, nullptr, 0); -#else -#error "no ptrace equivalent coded for this platform" -#endif - if (errno != 0 || raise(SIGSTOP) != 0) - xbt_die("Could not wait for the model-checker"); - - instance_->handleMessages(); + if (raise(SIGSTOP) != 0) + throw simgrid::xbt::errno_error("Could not wait for the model-checker"); + + instance_->handle_messages(); return instance_.get(); } -void Client::handleDeadlockCheck(mc_message_t* msg) +void Client::handle_deadlock_check(s_mc_message_t*) { bool deadlock = false; if (not simix_global->process_list.empty()) { @@ -96,14 +76,14 @@ void Client::handleDeadlockCheck(mc_message_t* msg) } // Send result: - mc_message_int_t answer{MC_MESSAGE_DEADLOCK_CHECK_REPLY, deadlock}; + s_mc_message_int_t answer{MC_MESSAGE_DEADLOCK_CHECK_REPLY, deadlock}; xbt_assert(channel_.send(answer) == 0, "Could not send response"); } -void Client::handleContinue(mc_message_t* msg) +void Client::handle_continue(s_mc_message_t*) { /* Nothing to do */ } -void Client::handleSimcall(s_mc_message_simcall_handle_t* message) +void Client::handle_simcall(s_mc_message_simcall_handle_t* message) { smx_actor_t process = SIMIX_process_from_PID(message->pid); if (not process) @@ -112,20 +92,15 @@ void Client::handleSimcall(s_mc_message_simcall_handle_t* message) if (channel_.send(MC_MESSAGE_WAITING)) xbt_die("Could not send MESSAGE_WAITING to model-checker"); } -void Client::handleRestore(s_mc_message_restore_t* message) -{ -#if HAVE_SMPI - smpi_really_switch_data_segment(message->index); -#endif -} -void Client::handleActorEnabled(s_mc_message_actor_enabled_t* msg) + +void Client::handle_actor_enabled(s_mc_message_actor_enabled_t* msg) { bool res = simgrid::mc::actor_is_enabled(SIMIX_process_from_PID(msg->aid)); - s_mc_message_int answer{MC_MESSAGE_ACTOR_ENABLED_REPLY, res}; + s_mc_message_int_t answer{MC_MESSAGE_ACTOR_ENABLED_REPLY, res}; channel_.send(answer); } -void Client::handleMessages() +void Client::handle_messages() { while (1) { XBT_DEBUG("Waiting messages from model-checker"); @@ -136,39 +111,33 @@ void Client::handleMessages() if (received_size < 0) xbt_die("Could not receive commands from the model-checker"); - mc_message_t* message = (mc_message_t*)message_buffer; + s_mc_message_t* message = (s_mc_message_t*)message_buffer; switch (message->type) { case MC_MESSAGE_DEADLOCK_CHECK: - xbt_assert(received_size == sizeof(mc_message_t), "Unexpected size for DEADLOCK_CHECK (%zd != %zu)", - received_size, sizeof(mc_message_t)); - handleDeadlockCheck(message); + xbt_assert(received_size == sizeof(s_mc_message_t), "Unexpected size for DEADLOCK_CHECK (%zd != %zu)", + received_size, sizeof(s_mc_message_t)); + handle_deadlock_check(message); break; case MC_MESSAGE_CONTINUE: - xbt_assert(received_size == sizeof(mc_message_t), "Unexpected size for MESSAGE_CONTINUE (%zd != %zu)", - received_size, sizeof(mc_message_t)); - handleContinue(message); + xbt_assert(received_size == sizeof(s_mc_message_t), "Unexpected size for MESSAGE_CONTINUE (%zd != %zu)", + received_size, sizeof(s_mc_message_t)); + handle_continue(message); return; case MC_MESSAGE_SIMCALL_HANDLE: xbt_assert(received_size == sizeof(s_mc_message_simcall_handle_t), "Unexpected size for SIMCALL_HANDLE (%zd != %zu)", received_size, sizeof(s_mc_message_simcall_handle_t)); - handleSimcall((s_mc_message_simcall_handle_t*)message_buffer); - break; - - case MC_MESSAGE_RESTORE: - xbt_assert(received_size == sizeof(mc_message_t), "Unexpected size for MESSAGE_RESTORE (%zd != %zu)", - received_size, sizeof(mc_message_t)); - handleRestore((s_mc_message_restore_t*)message_buffer); + handle_simcall((s_mc_message_simcall_handle_t*)message_buffer); break; case MC_MESSAGE_ACTOR_ENABLED: xbt_assert(received_size == sizeof(s_mc_message_actor_enabled_t), "Unexpected size for ACTOR_ENABLED (%zd != %zu)", received_size, sizeof(s_mc_message_actor_enabled_t)); - handleActorEnabled((s_mc_message_actor_enabled_t*)message_buffer); + handle_actor_enabled((s_mc_message_actor_enabled_t*)message_buffer); break; default: @@ -178,23 +147,23 @@ void Client::handleMessages() } } -void Client::mainLoop() +void Client::main_loop() { while (1) { simgrid::mc::wait_for_requests(); xbt_assert(channel_.send(MC_MESSAGE_WAITING) == 0, "Could not send WAITING message to model-checker"); - this->handleMessages(); + this->handle_messages(); } } -void Client::reportAssertionFailure(const char* description) +void Client::report_assertion_failure() { if (channel_.send(MC_MESSAGE_ASSERTION_FAILED)) xbt_die("Could not send assertion to model-checker"); - this->handleMessages(); + this->handle_messages(); } -void Client::ignoreMemory(void* addr, std::size_t size) +void Client::ignore_memory(void* addr, std::size_t size) { s_mc_message_ignore_memory_t message; message.type = MC_MESSAGE_IGNORE_MEMORY; @@ -204,7 +173,7 @@ void Client::ignoreMemory(void* addr, std::size_t size) xbt_die("Could not send IGNORE_MEMORY mesage to model-checker"); } -void Client::ignoreHeap(void* address, std::size_t size) +void Client::ignore_heap(void* address, std::size_t size) { xbt_mheap_t heap = mmalloc_get_current_heap(); @@ -225,7 +194,7 @@ void Client::ignoreHeap(void* address, std::size_t size) xbt_die("Could not send ignored region to MCer"); } -void Client::unignoreHeap(void* address, std::size_t size) +void Client::unignore_heap(void* address, std::size_t size) { s_mc_message_ignore_memory_t message; message.type = MC_MESSAGE_UNIGNORE_HEAP; @@ -235,7 +204,7 @@ void Client::unignoreHeap(void* address, std::size_t size) xbt_die("Could not send IGNORE_HEAP message to model-checker"); } -void Client::declareSymbol(const char* name, int* value) +void Client::declare_symbol(const char* name, int* value) { s_mc_message_register_symbol_t message; message.type = MC_MESSAGE_REGISTER_SYMBOL; @@ -248,7 +217,7 @@ void Client::declareSymbol(const char* name, int* value) xbt_die("Could send REGISTER_SYMBOL message to model-checker"); } -void Client::declareStack(void* stack, size_t size, smx_actor_t process, ucontext_t* context) +void Client::declare_stack(void* stack, size_t size, ucontext_t* context) { xbt_mheap_t heap = mmalloc_get_current_heap(); @@ -258,12 +227,6 @@ void Client::declareStack(void* stack, size_t size, smx_actor_t process, ucontex region.context = context; region.size = size; region.block = ((char*)stack - (char*)heap->heapbase) / BLOCKSIZE + 1; -#if HAVE_SMPI - if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP && process) - region.process_index = process->pid - 1; - else -#endif - region.process_index = -1; s_mc_message_stack_region_t message; message.type = MC_MESSAGE_STACK_REGION;