Make BufferList::fileNames() threadsafe

Using a static variable here was premature optimization: fileNames() is only
called from GuiRef (directly or indirectly), and since this is a dialog the
copying of a FileNameList is not noticeable at all.
This commit is contained in:
Georg Baum 2014-07-05 12:51:40 +02:00
parent e7c41b5f56
commit 922d48da27
3 changed files with 7 additions and 8 deletions

View File

@ -154,11 +154,9 @@ void BufferList::closeAll()
}
FileNameList const & BufferList::fileNames() const
FileNameList BufferList::fileNames() const
{
// FIXME THREAD
static FileNameList nvec;
nvec.clear();
FileNameList nvec;
BufferStorage::const_iterator it = bstore.begin();
BufferStorage::const_iterator end = bstore.end();
for (; it != end; ++it) {
@ -348,7 +346,7 @@ void BufferList::recordCurrentAuthor(Author const & author)
int BufferList::bufferNum(FileName const & fname) const
{
FileNameList const & buffers = fileNames();
FileNameList const buffers(fileNames());
FileNameList::const_iterator cit =
find(buffers.begin(), buffers.end(), fname);
if (cit == buffers.end())

View File

@ -66,7 +66,7 @@ public:
void closeAll();
/// returns a vector with all the buffers filenames
support::FileNameList const & fileNames() const;
support::FileNameList fileNames() const;
/// return true if no buffers loaded
bool empty() const;

View File

@ -251,7 +251,7 @@ void GuiRef::updateContents()
// insert buffer list
bufferCO->clear();
FileNameList const & buffers = theBufferList().fileNames();
FileNameList const buffers(theBufferList().fileNames());
for (FileNameList::const_iterator it = buffers.begin();
it != buffers.end(); ++it) {
bufferCO->addItem(toqstr(makeDisplayPath(it->absFileName())));
@ -455,7 +455,8 @@ void GuiRef::updateRefs()
refs_.clear();
int const the_buffer = bufferCO->currentIndex();
if (the_buffer != -1) {
FileName const & name = theBufferList().fileNames()[the_buffer];
FileNameList const names(theBufferList().fileNames());
FileName const & name = names[the_buffer];
Buffer const * buf = theBufferList().getBuffer(name);
buf->getLabelList(refs_);
}