[gtk+] Fix to compile for C libraries with no flockfile
- From: Руслан Ижбулатов <ruslanizhb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Fix to compile for C libraries with no flockfile
- Date: Wed, 30 Dec 2015 21:59:26 +0000 (UTC)
commit 91bb91dbb9e10691a9f4e3e8f0b1b4dabcd7ee27
Author: Руслан Ижбулатов <lrn1986 gmail com>
Date: Wed Dec 30 18:05:05 2015 +0000
Fix to compile for C libraries with no flockfile
Also use MS variant of flockfile, if available
(requires MSVCRT compatible with MSVCR90 or newer).
configure.ac | 2 +-
gtk/gtkimmodule.c | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 1 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 89d00d7..fb27eaa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -413,7 +413,7 @@ AC_SUBST(DISABLE_ON_QUARTZ)
AC_CHECK_LIB([rt], [shm_open], [SHM_LIBS="-lrt"], [SHM_LIBS=""])
AC_SUBST(SHM_LIBS)
-AC_CHECK_FUNCS(posix_fallocate)
+AC_CHECK_FUNCS(posix_fallocate flockfile _lock_file)
if test "x$enable_broadway_backend" = xyes; then
GDK_BACKENDS="$GDK_BACKENDS broadway"
diff --git a/gtk/gtkimmodule.c b/gtk/gtkimmodule.c
index 405d876..47e6348 100644
--- a/gtk/gtkimmodule.c
+++ b/gtk/gtkimmodule.c
@@ -64,6 +64,23 @@
#include "deprecated/gtkrc.h"
+/* We need to call getc() a lot in a loop. This is suboptimal,
+ * as getc() does thread locking on the FILE it is given.
+ * To optimize that, lock the file first, then call getc(),
+ * then unlock.
+ * If locking functions are not present in libc, fall back
+ * to the suboptimal getc().
+ */
+#if !defined(HAVE_FLOCKFILE) && !defined(HAVE__LOCK_FILE)
+# define flockfile(f) (void)1
+# define funlockfile(f) (void)1
+# define getc_unlocked(f) getc(f)
+#elif !defined(HAVE_FLOCKFILE) && defined(HAVE__LOCK_FILE)
+# define flockfile(f) _lock_file(f)
+# define funlockfile(f) _unlock_file(f)
+# define getc_unlocked(f) _getc_nolock(f)
+#endif
+
#define SIMPLE_ID "gtk-im-context-simple"
#define NONE_ID "gtk-im-context-none"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]