diff options
author | Mark H Weaver <mhw@netris.org> | 2014-02-03 21:04:39 -0500 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2014-02-03 21:05:52 -0500 |
commit | 5e69ceb7a667377a61cb0c31d7ac20e245b3fafd (patch) | |
tree | ef1e4fe569392fd4630dfcfc26d9948b7e6ffac5 /lib/glthread/threadlib.c | |
parent | 866af5da3d11ac4a9df44ee8c5b1781a0073c288 (diff) | |
download | guile-5e69ceb7a667377a61cb0c31d7ac20e245b3fafd.tar.gz |
Update Gnulib to v0.1-77-gd9361da
Diffstat (limited to 'lib/glthread/threadlib.c')
-rw-r--r-- | lib/glthread/threadlib.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lib/glthread/threadlib.c b/lib/glthread/threadlib.c new file mode 100644 index 000000000..37a5762d8 --- /dev/null +++ b/lib/glthread/threadlib.c @@ -0,0 +1,73 @@ +/* Multithreading primitives. + Copyright (C) 2005-2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#include <config.h> + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include <pthread.h> +# include <stdlib.h> + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The function to be executed by a dummy thread. */ +static void * +dummy_thread_func (void *arg) +{ + return arg; +} + +int +glthread_in_use (void) +{ + static int tested; + static int result; /* 1: linked with -lpthread, 0: only with libc */ + + if (!tested) + { + pthread_t thread; + + if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) + /* Thread creation failed. */ + result = 0; + else + { + /* Thread creation works. */ + void *retval; + if (pthread_join (thread, &retval) != 0) + abort (); + result = 1; + } + tested = 1; + } + return result; +} + +# endif + +#endif + +/* ========================================================================= */ + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; |