BUG: timeActivatedFileUpdate: was potentially rereading itself!

Fixed by setting flag which then gets queried by Time. Fixes #420.
This commit is contained in:
mattijs
2017-04-06 10:26:16 +01:00
parent eb6fb7f7e3
commit 2da2970c7c
9 changed files with 79 additions and 22 deletions

View File

@ -48,11 +48,10 @@ namespace functionObjects
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void Foam::functionObjects::timeActivatedFileUpdate::updateFile
(
const bool checkFiles
)
void Foam::functionObjects::timeActivatedFileUpdate::updateFile()
{
modified_ = false;
label i = lastIndex_;
while
(
@ -73,14 +72,7 @@ void Foam::functionObjects::timeActivatedFileUpdate::updateFile
mv(destFile, fileToUpdate_);
lastIndex_ = i;
if (checkFiles)
{
// Do an early check to avoid an additional iteration before
// any changes are picked up (see Time::run : does readModified
// before executing FOs). Note we have to protect the read
// constructor of *this from triggering this behaviour.
const_cast<Time&>(time_).Time::readModifiedObjects();
}
modified_ = true;
}
}
@ -98,7 +90,8 @@ Foam::functionObjects::timeActivatedFileUpdate::timeActivatedFileUpdate
time_(runTime),
fileToUpdate_("unknown-fileToUpdate"),
timeVsFile_(),
lastIndex_(-1)
lastIndex_(-1),
modified_(false)
{
read(dict);
}
@ -142,8 +135,8 @@ bool Foam::functionObjects::timeActivatedFileUpdate::read
<< timeVsFile_[i].second() << endl;
}
// Copy starting files. Avoid recursion by not checking for modified files.
updateFile(false);
// Copy starting files
updateFile();
return true;
}
@ -151,7 +144,7 @@ bool Foam::functionObjects::timeActivatedFileUpdate::read
bool Foam::functionObjects::timeActivatedFileUpdate::execute()
{
updateFile(true);
updateFile();
return true;
}
@ -163,4 +156,10 @@ bool Foam::functionObjects::timeActivatedFileUpdate::write()
}
bool Foam::functionObjects::timeActivatedFileUpdate::filesModified() const
{
return modified_;
}
// ************************************************************************* //

View File

@ -106,11 +106,14 @@ class timeActivatedFileUpdate
//- Index of last file copied
label lastIndex_;
//- Has anything been copied?
bool modified_;
// Private Member Functions
//- Update file
void updateFile(const bool checkFiles);
void updateFile();
//- Disallow default bitwise copy construct
timeActivatedFileUpdate(const timeActivatedFileUpdate&);
@ -150,6 +153,9 @@ public:
//- Do nothing
virtual bool write();
//- Did any file get changed during execution?
virtual bool filesModified() const;
};