[ovs-dev] [threads 02/11] ovs-thread: Add per-thread data support.

Ed Maste emaste at freebsd.org
Thu Jun 20 23:49:18 UTC 2013


On 20 June 2013 16:18, Ben Pfaff <blp at nicira.com> wrote:
> On Wed, Jun 19, 2013 at 01:17:03PM -0700, Ben Pfaff wrote:
>> POSIX defines a portable pthread_key_t API for per-thread data.  GCC and
>> C11 have two different forms of per-thread data that are generally faster
>> than the POSIX API, where they are available.  This commit adds a
>> macro-based wrapper, DEFINE_PER_THREAD_DATA, that takes advantage of the
>> GCC extension where it is available and falls back to the POSIX API
>> otherwise.  (I'm not aware of any compilers that implement the C11 feature,
>> so this commit doesn't try to use it.)
>
> Ed Maste pointed out off-list that clang on FreeBSD supports
> _Thread_local.  Here's a revised version of the patch that supports
> both _Thread_local and __thread.  I've also updated the "reviews"
> branch.

I changed the autoconf test like so:

diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4
index 3895346..eb91b1a 100644
--- a/m4/openvswitch.m4
+++ b/m4/openvswitch.m4
@@ -402,7 +402,10 @@ AC_DEFUN([OVS_CHECK__THREAD_LOCAL],
      [whether $CC supports _Thread_local],
      [ovs_cv__Thread_local],
      [AC_LINK_IFELSE(
-        [AC_LANG_PROGRAM([static _Thread_local var;], [return var;])],
+        [AC_LANG_PROGRAM(
+          [#include <threads.h>
+           static _Thread_local int var;],
+          [return var;])],
         [ovs_cv__Thread_local=yes],
         [ovs_cv__Thread_local=no])])
    if test $ovs_cv__Thread_local = no; then

This version builds and passes unit tests for me on FreeBSD 9.x, with
both GCC and Clang.



More information about the dev mailing list