[Mesa-dev] [PATCHv3 05/16] util: add a generic thread pool data structure

Chia-I Wu olvaffe at gmail.com
Wed Aug 20 19:15:51 PDT 2014


On Thu, Aug 21, 2014 at 9:31 AM, Matt Turner <mattst88 at gmail.com> wrote:
> On Tue, Aug 19, 2014 at 11:40 PM, Chia-I Wu <olvaffe at gmail.com> wrote:
>> It can be used to implement, for example, threaded glCompileShader and
>> glLinkProgram.  Two basic tests are included to verify the basic functions,
>> and to give us some confidence about its thread-safety.
>>
>> v2: allow tasks to "complete" other tasks
>>
>> Signed-off-by: Chia-I Wu <olv at lunarg.com>
>> Reviewed-by: Brian Paul <brianp at vmware.com>
>>
>> v3: move to src/util/ and mention the tests
>> ---
>>  configure.ac                                  |   3 +-
>>  src/util/Makefile.am                          |   5 +-
>>  src/util/Makefile.sources                     |   3 +-
>>  src/util/tests/threadpool/Makefile.am         |  36 ++
>>  src/util/tests/threadpool/threadpool_test.cpp | 137 ++++++++
>>  src/util/threadpool.c                         | 476 ++++++++++++++++++++++++++
>>  src/util/threadpool.h                         |  67 ++++
>>  7 files changed, 724 insertions(+), 3 deletions(-)
>>  create mode 100644 src/util/tests/threadpool/Makefile.am
>>  create mode 100644 src/util/tests/threadpool/threadpool_test.cpp
>>  create mode 100644 src/util/threadpool.c
>>  create mode 100644 src/util/threadpool.h
>>
>> diff --git a/configure.ac b/configure.ac
>> index 57e9f7d..2f7268f 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -2261,7 +2261,8 @@ AC_CONFIG_FILES([Makefile
>>                 src/mesa/drivers/x11/Makefile
>>                 src/mesa/main/tests/Makefile
>>                 src/util/Makefile
>> -               src/util/tests/hash_table/Makefile])
>> +               src/util/tests/hash_table/Makefile
>> +               src/util/tests/threadpool/Makefile])
>>
>>  dnl Sort the dirs alphabetically
>>  GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
>> diff --git a/src/util/Makefile.am b/src/util/Makefile.am
>> index 4733a1a..da6815e 100644
>> --- a/src/util/Makefile.am
>> +++ b/src/util/Makefile.am
>> @@ -19,7 +19,7 @@
>>  # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
>>  # IN THE SOFTWARE.
>>
>> -SUBDIRS = . tests/hash_table
>> +SUBDIRS = . tests/hash_table tests/threadpool
>>
>>  include Makefile.sources
>>
>> @@ -34,6 +34,9 @@ libmesautil_la_SOURCES = \
>>         $(MESA_UTIL_FILES) \
>>         $(MESA_UTIL_GENERATED_FILES)
>>
>> +libmesautil_la_LIBADD = \
>> +       $(PTHREAD_LIBS)
>
> You want to link the test programs with pthreads, not the convenience
> library. Add PTHREAD_CFLAGS to the target's CFLAGS, and likewise for
> PTHREAD_LIBS (which it looks like you're doing below, so throw this
> hunk out?)
I think it can be thrown out.  I added $(PTHREAD_LIBS) to the
convenience library so that all targets would be automatically linked
with pthread.  But since this is a base utility library, and only
those use thread pool would need pthread, I can add pthread to all GL
targets (which should already be the case).

>
>> +
>>  BUILT_SOURCES = $(MESA_UTIL_GENERATED_FILES)
>>  CLEANFILES = $(BUILT_SOURCES)
>>
>> diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources
>> index 86466dc..65f98f7 100644
>> --- a/src/util/Makefile.sources
>> +++ b/src/util/Makefile.sources
>> @@ -1,7 +1,8 @@
>>  MESA_UTIL_FILES :=     \
>>         hash_table.c    \
>>         ralloc.c \
>> -       strtod.cpp
>> +       strtod.cpp \
>> +       threadpool.c
>>
>>  MESA_UTIL_GENERATED_FILES = \
>>         format_srgb.c
>> diff --git a/src/util/tests/threadpool/Makefile.am b/src/util/tests/threadpool/Makefile.am
>> new file mode 100644
>> index 0000000..2aa010c
>> --- /dev/null
>> +++ b/src/util/tests/threadpool/Makefile.am
>> @@ -0,0 +1,36 @@
>> +# Copyright © 2009 Intel Corporation
>
> Seems wrong.
>
>> +#
>> +#  Permission is hereby granted, free of charge, to any person obtaining a
>> +#  copy of this software and associated documentation files (the "Software"),
>> +#  to deal in the Software without restriction, including without limitation
>> +#  on the rights to use, copy, modify, merge, publish, distribute, sub
>> +#  license, and/or sell copies of the Software, and to permit persons to whom
>> +#  the Software is furnished to do so, subject to the following conditions:
>> +#
>> +#  The above copyright notice and this permission notice (including the next
>> +#  paragraph) shall be included in all copies or substantial portions of the
>> +#  Software.
>> +#
>> +#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>> +#  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>> +#  FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
>> +#  ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
>
> Adam Jackson?
That was copied from src/util/tests/hash_table/Makefile.am.  I will
update the copyright header.

>
> Otherwise, the build system stuff looks okay. Just fix this stuff
> before you commit.

-- 
olv at LunarG.com


More information about the mesa-dev mailing list