BufferStorage::iterator const it =
find(bstore.begin(), bstore.end(), buf);
if (it != bstore.end()) {
+ Buffer const * parent = buf->parent();
Buffer * tmp = (*it);
bstore.erase(it);
LASSERT(tmp, return);
delete tmp;
+ if (parent)
+ // If this was a child, update the parent's buffer
+ // to avoid crashes due to dangling pointers (bug 9979)
+ parent->updateBuffer();
}
}
if (bstore.empty())
return 0;
- BufferStorage::const_iterator it =
+ BufferStorage::const_iterator it =
find(bstore.begin(), bstore.end(), buf);
LASSERT(it != bstore.end(), return 0);
++it;
if (bstore.empty())
return 0;
- BufferStorage::const_iterator it =
+ BufferStorage::const_iterator it =
find(bstore.begin(), bstore.end(), buf);
LASSERT(it != bstore.end(), return 0);
(*it)->markDepClean(masterTmpDir);
}
}
- runparams.is_child = false;
}
}
+void BufferList::invalidateConverterCache() const
+{
+ BufferStorage::const_iterator it = bstore.begin();
+ BufferStorage::const_iterator const en = bstore.end();
+ for (; it != en; ++it)
+ (*it)->params().invalidateConverterCache();
+}
+
+
bool BufferList::exists(FileName const & fname) const
{
return getBuffer(fname) != 0;
}
- bool BufferList::isLoaded(Buffer const * b) const
+bool BufferList::isLoaded(Buffer const * b) const
{
if (!b)
return false;
}
+bool BufferList::isInternal(Buffer const * b) const
+{
+ if (!b)
+ return false;
+ BufferStorage::const_iterator cit =
+ find(binternal.begin(), binternal.end(), b);
+ return cit != binternal.end();
+}
+
+
bool BufferList::isOthersChild(Buffer * parent, Buffer * child)
{
LASSERT(parent, return false);
LASSERT(child, return false);
LASSERT(parent->isChild(child), return false);
-
+
// Does child document have a different parent?
Buffer const * parent_ = child->parent();
if (parent_ && parent_ != parent)