Put __comedi_errno variable into thread-local storage if the compiler
authorIan Abbott <abbotti@mev.co.uk>
Wed, 18 Feb 2009 14:10:54 +0000 (14:10 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Wed, 18 Feb 2009 14:10:54 +0000 (14:10 +0000)
supports it.  Configuration test uses Alan Woodland's 'ax_tls.m4' from
<http://autoconf-archive.cryp.to/ax_tls.html>.

AUTHORS
configure.ac
lib/error.c
lib/libinternal.h
m4/ax_tls.m4 [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
index 1b08ff78353b670202c677b543802190ae0dd795..8cd58a6bd84a03734018bf24355a196da6d88571 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -10,5 +10,6 @@ Steven Jenkins <steven dot jenkins at ieee dot org>
 Luc Lefebvre <luc dot lefebvre at mcgill dot ca>
 Tim Ousley <tim dot ousley at ni dot com>
 Bernd Porr <Bernd dot Porr at f2s dot com>
+Alan Woodland <ajw05 at aber dot ac dot uk> [ax_tls.m4]
 Bean ZAHND <beat dot zahnd at phim dot unibe dot ch>
 
index 2e6bc159e9a7a8dcaa06c76aad537342808905a3..249d49745b6c6dccccd1a7f82ff5b694e1804735 100644 (file)
@@ -44,6 +44,8 @@ AC_PROG_LIBTOOL
 
 AC_HEADER_STDC([])
 
+AX_TLS
+
 COMEDILIB_CFLAGS="$COMEDILIB_CFLAGS -I\$(top_srcdir)/include $COMEDILIB_DEBUG"
 COMEDILIB_LIBS="$COMEDILIB_LIBS \$(top_builddir)/lib/libcomedi.la -lm"
 AC_SUBST(COMEDILIB_CFLAGS)
index d88c78c412604661a367d94c09190111f5739bf8..835ae42309e1397d9c141b1fc68d21d5c64c9eb3 100644 (file)
@@ -40,7 +40,7 @@ char *__comedilib_error_strings[]={
 #define n_errors (sizeof(__comedilib_error_strings)/sizeof(void *))
 
 int __comedi_loglevel=1;
-int __comedi_errno=0;
+TLS int __comedi_errno=0;
 
 EXPORT_ALIAS_DEFAULT(_comedi_loglevel,comedi_loglevel,0.7.18);
 int _comedi_loglevel(int loglevel)
index 462521e9a15ac83351d419c34eb092f55f6cc585..7f58c745609246589426997cf1869e69540ca20a 100644 (file)
@@ -26,6 +26,7 @@
 
 #define _COMEDILIB_DEPRECATED
 
+#include "config.h"
 #include "comedilib.h"
 #include "comedi.h"
 #include "comedi_errno.h"
@@ -66,7 +67,7 @@
 
 extern int __comedi_init;
 extern int __comedi_loglevel;
-extern int __comedi_errno;
+extern TLS int __comedi_errno;
 
 #if 0
 
diff --git a/m4/ax_tls.m4 b/m4/ax_tls.m4
new file mode 100644 (file)
index 0000000..41620a7
--- /dev/null
@@ -0,0 +1,78 @@
+# ===========================================================================
+#                 http://autoconf-archive.cryp.to/ax_tls.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_TLS
+#
+# DESCRIPTION
+#
+#   Provides a test for the compiler support of thread local storage (TLS)
+#   extensions. Defines TLS if it is found. Currently only knows about GCC
+#   and MSVC. I think SunPro uses the same as GCC, and Borland apparently
+#   supports either.
+#
+# LAST MODIFICATION
+#
+#   2008-04-12
+#
+# COPYLEFT
+#
+#   Copyright (c) 2008 Alan Woodland <ajw05@aber.ac.uk>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Macro Archive. When you make and
+#   distribute a modified version of the Autoconf Macro, you may extend this
+#   special exception to the GPL to apply to your modified version as well.
+
+AC_DEFUN([AX_TLS], [
+  AC_MSG_CHECKING(for thread local storage (TLS) class)
+  AC_CACHE_VAL(ac_cv_tls, [
+    ax_tls_keywords="__thread __declspec(thread) none"
+    for ax_tls_keyword in $ax_tls_keywords; do
+       case $ax_tls_keyword in
+          none) ac_cv_tls=none ; break ;;
+         *)
+             AC_TRY_COMPILE(
+                [#include <stdlib.h>
+                 static void
+                 foo(void) {
+                 static ] $ax_tls_keyword [ int bar;
+                 exit(1);
+                 }],
+                 [],
+                 [ac_cv_tls=$ax_tls_keyword ; break],
+                 ac_cv_tls=none
+             )
+         esac
+    done
+])
+
+  if test "$ac_cv_tls" != "none"; then
+    dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here])
+    AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+  fi
+  AC_MSG_RESULT($ac_cv_tls)
+])