From Tim Moore, fix for race conditions in takeOrGenerate() methods

This commit is contained in:
Robert Osfield
2010-12-17 13:43:41 +00:00
parent d8e3225cd8
commit 362edaa1b9
2 changed files with 16 additions and 10 deletions

View File

@@ -749,14 +749,17 @@ GLBufferObject* GLBufferObjectSet::takeFromOrphans(BufferObject* bufferObject)
GLBufferObject* GLBufferObjectSet::takeOrGenerate(BufferObject* bufferObject)
{
// see if we can recyle GLBufferObject from the orphane list
if (!_pendingOrphanedGLBufferObjects.empty())
// see if we can recyle GLBufferObject from the orphan list
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex);
handlePendingOrphandedGLBufferObjects();
return takeFromOrphans(bufferObject);
if (!_pendingOrphanedGLBufferObjects.empty())
{
handlePendingOrphandedGLBufferObjects();
return takeFromOrphans(bufferObject);
}
}
else if (!_orphanedGLBufferObjects.empty())
if (!_orphanedGLBufferObjects.empty())
{
return takeFromOrphans(bufferObject);
}