[Mesa-dev] [PATCH 03/15] mesa: Add a clone function to mesa hash

Brian Paul brianp at vmware.com
Mon Aug 26 07:51:32 PDT 2013


On 08/26/2013 04:43 AM, Timothy Arceri wrote:
>
> Signed-off-by: Timothy Arceri <t_arceri at yahoo.com.au>
> ---
>   src/mesa/main/hash.c |   26 ++++++++++++++++++++++++++
>   src/mesa/main/hash.h |    3 +++
>   2 files changed, 29 insertions(+)
>
> diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c
> index 6591af9..8dde8b1 100644
> --- a/src/mesa/main/hash.c
> +++ b/src/mesa/main/hash.c
> @@ -302,6 +302,32 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table,
>
>
>   /**
> + * Clone all entries in a hash table, into a new table.
> + *
> + * \param table  the hash table to clone
> + */
> +struct _mesa_HashTable *
> +_mesa_HashClone(struct _mesa_HashTable *table)

Can that be const qualified?


> +{
> +   struct hash_entry *entry;
> +   struct _mesa_HashTable *clonetable;
> +
> +   ASSERT(table);
> +   _glthread_LOCK_MUTEX(table->Mutex);
> +
> +   clonetable = _mesa_NewHashTable();
> +   assert(clonetable);
> +   hash_table_foreach(table->ht, entry) {
> +      _mesa_HashInsert(clonetable, (GLint)(uintptr_t)entry->key, entry->data);
> +   }
> +
> +   _glthread_UNLOCK_MUTEX(table->Mutex);
> +
> +   return clonetable;
> +}
> +
> +
> +/**
>    * Walk over all entries in a hash table, calling callback function for each.
>    * Note: we use a separate mutex in this function to avoid a recursive
>    * locking deadlock (in case the callback calls _mesa_HashRemove()) and to
> diff --git a/src/mesa/main/hash.h b/src/mesa/main/hash.h
> index 142d284..9208701 100644
> --- a/src/mesa/main/hash.h
> +++ b/src/mesa/main/hash.h
> @@ -50,6 +50,9 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table,
>                       void (*callback)(GLuint key, void *data, void *userData),
>                       void *userData);
>
> +extern struct _mesa_HashTable *
> +_mesa_HashClone(struct _mesa_HashTable *table);
> +
>   extern void
>   _mesa_HashWalk(const struct _mesa_HashTable *table,
>                  void (*callback)(GLuint key, void *data, void *userData),
>



More information about the mesa-dev mailing list