This fixes fdo bug 34502.

Signed-off-by: Török Edvin <edwinto...@gmail.com>
---
 src/mesa/main/hash.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c
index 9757754..e9a9748 100644
--- a/src/mesa/main/hash.c
+++ b/src/mesa/main/hash.c
@@ -127,8 +127,8 @@ _mesa_DeleteHashTable(struct _mesa_HashTable *table)
  * 
  * \return pointer to user's data or NULL if key not in table
  */
-void *
-_mesa_HashLookup(struct _mesa_HashTable *table, GLuint key)
+static inline void *
+_mesa_HashLookup_unlocked(struct _mesa_HashTable *table, GLuint key)
 {
    GLuint pos;
    const struct HashEntry *entry;
@@ -137,19 +137,26 @@ _mesa_HashLookup(struct _mesa_HashTable *table, GLuint 
key)
    assert(key);
 
    pos = HASH_FUNC(key);
-   _glthread_LOCK_MUTEX(table->Mutex);
    entry = table->Table[pos];
    while (entry) {
       if (entry->Key == key) {
-         _glthread_UNLOCK_MUTEX(table->Mutex);
          return entry->Data;
       }
       entry = entry->Next;
    }
-   _glthread_UNLOCK_MUTEX(table->Mutex);
    return NULL;
 }
 
+void *
+_mesa_HashLookup(struct _mesa_HashTable *table, GLuint key)
+{
+   void *res;
+   assert(table);
+   _glthread_LOCK_MUTEX(table->Mutex);
+   res = _mesa_HashLookup_unlocked(table, key);
+   _glthread_UNLOCK_MUTEX(table->Mutex);
+   return res;
+}
 
 
 /**
@@ -447,7 +454,7 @@ _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, 
GLuint numKeys)
       GLuint freeStart = 1;
       GLuint key;
       for (key = 1; key != maxKey; key++) {
-        if (_mesa_HashLookup(table, key)) {
+        if (_mesa_HashLookup_unlocked(table, key)) {
            /* darn, this key is already in use */
            freeCount = 0;
            freeStart = key+1;
-- 
1.7.0


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to