*/
class ModelChecker {
CheckerSide checker_side_;
- // This is the parent snapshot of the current state:
- PageStore page_store_{500};
- std::unique_ptr<RemoteProcess> remote_process_;
+ std::unique_ptr<RemoteProcessMemory> remote_process_memory_;
Exploration* exploration_ = nullptr;
- unsigned long visited_states_ = 0;
-
public:
ModelChecker(ModelChecker const&) = delete;
ModelChecker& operator=(ModelChecker const&) = delete;
- explicit ModelChecker(std::unique_ptr<RemoteProcess> remote_simulation, int sockfd);
+ explicit ModelChecker(std::unique_ptr<RemoteProcessMemory> remote_simulation, int sockfd);
- RemoteProcess& get_remote_process() { return *remote_process_; }
- Channel& channel() { return checker_side_.get_channel(); }
- PageStore& page_store() { return page_store_; }
+ RemoteProcessMemory& get_remote_process_memory() { return *remote_process_memory_; }
+ Channel& get_channel() { return checker_side_.get_channel(); }
+ void channel_handle_events() { checker_side_.dispatch(); }
void start();
- void shutdown();
- void resume();
- void wait_for_requests();
/** Let the application take a transition. A new Transition is created iff the last parameter is true */
Transition* handle_simcall(aid_t aid, int times_considered, bool new_transition);
- /* Interactions with the simcall observer */
- XBT_ATTRIB_NORETURN void exit(int status);
-
- void finalize_app(bool terminate_asap = false);
-
Exploration* get_exploration() const { return exploration_; }
void set_exploration(Exploration* exploration) { exploration_ = exploration; }
- unsigned long get_visited_states() const { return visited_states_; }
- void inc_visited_states() { visited_states_++; }
-
private:
- void setup_ignore();
bool handle_message(const char* buffer, ssize_t size);
void handle_waitpid();
};