mirror of
https://github.com/nasa/trick.git
synced 2024-12-21 22:17:51 +00:00
543bbc0585
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
38 lines
1.1 KiB
C++
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(©_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(©_mutex);
|
|
|
|
}
|
|
|
|
|