changeset 17182:10268a7a6854

cond, lock, thread: better 'inline' * lib/glthread/cond.c, lib/glthread/cond.h (_GLTHREAD_COND_INLINE): * lib/glthread/thread.c, lib/glthread/thread.h (_GLTHREAD_THREAD_INLINE): New macros. Use them instead of static inline, for header functions. * lib/glthread/cond.c (gl_waitqueue_init, gl_waitqueue_remove) (gl_waitqueue_notify_first, gl_waitqueue_notify_all): * lib/glthread/lock.c (gl_waitqueue_init) (gl_waitqueue_notify_first, gl_waitqueue_notify_all): * lib/glthread/thread.c (get_current_thread_handle): Change 'static inline' to 'inline'. * lib/glthread/cond.h, lib/glthread/thread.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. * m4/cond.m4 (gl_COND): * m4/lock.m4 (gl_PREREQ_LOCK): * m4/thread.m4 (gl_THREAD): Do not require AC_C_INLINE. * modules/cond, modules/thread (Depends-on): Add extern-inline.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 20 Nov 2012 22:25:08 -0800
parents a80e4b259d9b
children f3fa9d9507c7
files ChangeLog lib/glthread/cond.c lib/glthread/cond.h lib/glthread/lock.c lib/glthread/thread.c lib/glthread/thread.h m4/cond.m4 m4/lock.m4 m4/thread.m4 modules/cond modules/thread
diffstat 11 files changed, 51 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
 2012-11-29  Paul Eggert  <eggert@cs.ucla.edu>
 
+	cond, lock, thread: better 'inline'
+	* lib/glthread/cond.c, lib/glthread/cond.h (_GLTHREAD_COND_INLINE):
+	* lib/glthread/thread.c, lib/glthread/thread.h (_GLTHREAD_THREAD_INLINE):
+	New macros.  Use them instead of static inline, for header functions.
+	* lib/glthread/cond.c (gl_waitqueue_init, gl_waitqueue_remove)
+	(gl_waitqueue_notify_first, gl_waitqueue_notify_all):
+	* lib/glthread/lock.c (gl_waitqueue_init)
+	(gl_waitqueue_notify_first, gl_waitqueue_notify_all):
+	* lib/glthread/thread.c (get_current_thread_handle):
+	Change 'static inline' to 'inline'.
+	* lib/glthread/cond.h, lib/glthread/thread.h:
+	Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END.
+	* m4/cond.m4 (gl_COND):
+	* m4/lock.m4 (gl_PREREQ_LOCK):
+	* m4/thread.m4 (gl_THREAD):
+	Do not require AC_C_INLINE.
+	* modules/cond, modules/thread (Depends-on): Add extern-inline.
+
 	chdir-long, cycle-check, savewd: better 'inline'
 	* lib/chdir-long.c (cdb_init, cdb_fchdir, cdb_free)
 	(find_non_slash):
--- a/lib/glthread/cond.c
+++ b/lib/glthread/cond.c
@@ -19,6 +19,7 @@
 
 #include <config.h>
 
+#define _GLTHREAD_COND_INLINE _GL_EXTERN_INLINE
 #include "glthread/cond.h"
 
 /* ========================================================================= */
@@ -90,7 +91,7 @@
                    This field is immutable once initialized. */
 };
 
-static inline void
+static void
 gl_waitqueue_init (gl_waitqueue_t *wq)
 {
   wq->wq_list.wql_next = &wq->wq_list;
@@ -134,7 +135,7 @@
 /* Removes the current thread, represented by a 'struct gl_waitqueue_element *',
    from a wait queue.
    Returns true if is was found and removed, false if it was not present.  */
-static inline bool
+static bool
 gl_waitqueue_remove (gl_waitqueue_t *wq, struct gl_waitqueue_element *elt)
 {
   if (elt->link.wql_next != NULL && elt->link.wql_prev != NULL)
@@ -153,7 +154,7 @@
 }
 
 /* Notifies the first thread from a wait queue and dequeues it.  */
-static inline void
+static void
 gl_waitqueue_notify_first (gl_waitqueue_t *wq)
 {
   if (wq->wq_list.wql_next != &wq->wq_list)
@@ -178,7 +179,7 @@
 }
 
 /* Notifies all threads from a wait queue and dequeues them all.  */
-static inline void
+static void
 gl_waitqueue_notify_all (gl_waitqueue_t *wq)
 {
   struct gl_waitqueue_link *l;
--- a/lib/glthread/cond.h
+++ b/lib/glthread/cond.h
@@ -55,6 +55,11 @@
 
 #include "glthread/lock.h"
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GLTHREAD_COND_INLINE
+# define _GLTHREAD_COND_INLINE _GL_INLINE
+#endif
+
 /* ========================================================================= */
 
 #if USE_POSIX_THREADS
@@ -369,7 +374,7 @@
    while (0)
 #define gl_cond_timedwait(COND, LOCK, ABSTIME) \
   gl_cond_timedwait_func (&COND, &LOCK, ABSTIME)
-static inline bool
+_GLTHREAD_COND_INLINE bool
 gl_cond_timedwait_func (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime)
 {
   int err = glthread_cond_timedwait (cond, lock, abstime);
@@ -405,4 +410,6 @@
 }
 #endif
 
+_GL_INLINE_HEADER_END
+
 #endif /* _GLTHREAD_COND_H */
--- a/lib/glthread/lock.c
+++ b/lib/glthread/lock.c
@@ -682,7 +682,7 @@
 /* In this file, the waitqueues are implemented as circular arrays.  */
 #define gl_waitqueue_t gl_carray_waitqueue_t
 
-static inline void
+static void
 gl_waitqueue_init (gl_waitqueue_t *wq)
 {
   wq->array = NULL;
@@ -743,7 +743,7 @@
 }
 
 /* Notifies the first thread from a wait queue and dequeues it.  */
-static inline void
+static void
 gl_waitqueue_notify_first (gl_waitqueue_t *wq)
 {
   SetEvent (wq->array[wq->offset + 0]);
@@ -754,7 +754,7 @@
 }
 
 /* Notifies all threads from a wait queue and dequeues them all.  */
-static inline void
+static void
 gl_waitqueue_notify_all (gl_waitqueue_t *wq)
 {
   unsigned int i;
--- a/lib/glthread/thread.c
+++ b/lib/glthread/thread.c
@@ -21,6 +21,7 @@
 #include <config.h>
 
 /* Specification.  */
+# define _GLTHREAD_THREAD_INLINE _GL_EXTERN_INLINE
 #include "glthread/thread.h"
 
 #include <stdlib.h>
@@ -85,7 +86,7 @@
 };
 
 /* Return a real HANDLE object for the current thread.  */
-static inline HANDLE
+static HANDLE
 get_current_thread_handle (void)
 {
   HANDLE this_handle;
--- a/lib/glthread/thread.h
+++ b/lib/glthread/thread.h
@@ -74,6 +74,11 @@
 #include <errno.h>
 #include <stdlib.h>
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GLTHREAD_THREAD_INLINE
+# define _GLTHREAD_THREAD_INLINE _GL_INLINE
+#endif
+
 /* ========================================================================= */
 
 #if USE_POSIX_THREADS
@@ -360,7 +365,7 @@
 extern "C" {
 #endif
 
-static inline gl_thread_t
+_GLTHREAD_THREAD_INLINE gl_thread_t
 gl_thread_create (void *(*func) (void *arg), void *arg)
 {
   gl_thread_t thread;
@@ -397,4 +402,6 @@
 }
 #endif
 
+_GL_INLINE_HEADER_END
+
 #endif /* _GLTHREAD_THREAD_H */
--- a/m4/cond.m4
+++ b/m4/cond.m4
@@ -1,4 +1,4 @@
-# cond.m4 serial 1
+# cond.m4 serial 2
 dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,5 +7,4 @@
 AC_DEFUN([gl_COND],
 [
   AC_REQUIRE([gl_THREADLIB])
-  AC_REQUIRE([AC_C_INLINE])
 ])
--- a/m4/lock.m4
+++ b/m4/lock.m4
@@ -1,4 +1,4 @@
-# lock.m4 serial 12 (gettext-0.18.2)
+# lock.m4 serial 13 (gettext-0.18.2)
 dnl Copyright (C) 2005-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -35,7 +35,5 @@
   gl_PREREQ_LOCK
 ])
 
-# Prerequisites of lib/lock.c.
-AC_DEFUN([gl_PREREQ_LOCK], [
-  AC_REQUIRE([AC_C_INLINE])
-])
+# Prerequisites of lib/glthread/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [:])
--- a/m4/thread.m4
+++ b/m4/thread.m4
@@ -1,4 +1,4 @@
-# thread.m4 serial 2
+# thread.m4 serial 3
 dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,7 +7,6 @@
 AC_DEFUN([gl_THREAD],
 [
   AC_REQUIRE([gl_THREADLIB])
-  AC_REQUIRE([AC_C_INLINE])
 
   if test $gl_threads_api = posix; then
     gl_save_LIBS="$LIBS"
--- a/modules/cond
+++ b/modules/cond
@@ -10,6 +10,7 @@
 threadlib
 lock
 errno
+extern-inline
 stdbool
 time
 gettimeofday
@@ -28,4 +29,3 @@
 
 Maintainer:
 Yoann Vandoorselaere
-
--- a/modules/thread
+++ b/modules/thread
@@ -8,6 +8,7 @@
 
 Depends-on:
 threadlib
+extern-inline
 lock
 
 configure.ac:
@@ -27,4 +28,3 @@
 
 Maintainer:
 Yoann Vandoorselaere
-