trick/trick_source/sim_services/VariableServer/VariableServerThread_restart.cpp
Alex Lin 543bbc0585 Add option to validate pointer addresses in variable server clients
Added a flag called validate_address to each variable server thread.  When
activated each pointer address will be tested to see if it is in memory
the memory manager is tracking.  If it is then everything proceeds normally.
If it does not, then an error return value is returned for the value of this
variable.

refs #193
2016-02-25 08:56:04 -06:00

38 lines
1.1 KiB
C++

#include <stdlib.h>
#include "trick/VariableServerThread.hh"
void Trick::VariableServerThread::preload_checkpoint() {
// Let the thread complete any data copying it has to do
// and then suspend data copying until the checkpoint is reloaded.
pthread_mutex_lock(&copy_mutex);
// Save the pause state of this thread.
saved_pause_cmd = pause_cmd;
// Disallow data writing.
pause_cmd = true ;
// Temporarily "disconnect" the variable references from Trick Managed Memory
// by tagging each as a "bad reference".
std::vector <VariableReference *>::iterator it ;
for (it = vars.begin(); it != vars.end() ; it++) {
(*it)->ref->address = (char*)&bad_ref_int;
(*it)->ref->attr = new ATTRIBUTES() ;
(*it)->ref->attr->type = TRICK_NUMBER_OF_TYPES ;
(*it)->ref->attr->units = (char *)"--" ;
(*it)->ref->attr->size = sizeof(int) ;
}
}
void Trick::VariableServerThread::restart() {
// Set the pause state of this thread back to its "pre-checkpoint reload" state.
pause_cmd = saved_pause_cmd ;
// Allow data copying to continue.
pthread_mutex_unlock(&copy_mutex);
}