summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Reiter <creiter@src.gnome.org>2018-05-31 14:29:33 +0200
committerChristoph Reiter <creiter@src.gnome.org>2018-05-31 14:29:33 +0200
commitfe59a18f8985383d2baf1796342304714bfb6983 (patch)
tree06270c816c98200dfa6a75082b0a768cbd1c9756
parente03f83212deb6b30d09219e0a8896ac0d02f46ec (diff)
downloadglib-fe59a18f8985383d2baf1796342304714bfb6983.tar.gz
Remove posix_memalign() checks for an old glibc bug
POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS was added in https://bugzilla.gnome.org/show_bug.cgi?id=328254 to work around a glibc bug where it wrongly checked the size argument to be a power of two instead of the alignment. This was fixed in glibc in https://sourceware.org/git/?p=glibc.git;a=commit;h=b2bffca2e3b59dd882039e3b0ab835d127bdaf7a about 16 years ago.
-rw-r--r--config.h.meson3
-rw-r--r--config.h.win32.in3
-rw-r--r--configure.ac42
-rw-r--r--glib/gslice.c15
4 files changed, 5 insertions, 58 deletions
diff --git a/config.h.meson b/config.h.meson
index fd0bfcaf9..291b668cd 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -689,9 +689,6 @@
/* Define to the version of this package. */
#mesondefine PACKAGE_VERSION
-/* define if posix_memalign() can allocate any size */
-#mesondefine POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS
-
/* The size of `char', as computed by sizeof. */
#mesondefine SIZEOF_CHAR
diff --git a/config.h.win32.in b/config.h.win32.in
index 14ac11d39..af4157259 100644
--- a/config.h.win32.in
+++ b/config.h.win32.in
@@ -704,9 +704,6 @@
/* Define to the version of this package. */
#define PACKAGE_VERSION "@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.@GLIB_MICRO_VERSION@"
-/* define if posix_memalign() can allocate any size */
-/* #undef POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS */
-
/* The size of `char', as computed by sizeof. */
#define SIZEOF_CHAR 1
diff --git a/configure.ac b/configure.ac
index be48c9a19..55471d34d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1335,48 +1335,6 @@ if test x$glib_cv_langinfo_abaltmon = xyes; then
fi
AC_LANG_RESTORE
-dnl ****************************************
-dnl *** posix_memalign ***
-dnl ****************************************
-AC_MSG_CHECKING(for a compliant posix_memalign() implementation)
-AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[
- glib_cv_compliant_posix_memalign=0
- if test "$ac_cv_func_posix_memalign" = "yes" ; then
- AC_TRY_RUN([
- #define _XOPEN_SOURCE 600
- #include <stdlib.h> /* posix_memalign() should be defined here */
- /* some systems break if #include <malloc.h> used */
- static void test_memalign (size_t boundary, size_t size) {
- void *mem = 0;
- if (posix_memalign (&mem, boundary, size) != 0 || !mem)
- exit (1);
- else
- free (mem);
- }
- int main() {
- test_memalign ( 128, 128 - 2 * sizeof (void*));
- test_memalign ( 256, 256 - 2 * sizeof (void*));
- test_memalign ( 512, 512 - 2 * sizeof (void*));
- test_memalign ( 1024, 1024 - 2 * sizeof (void*));
- test_memalign ( 2048, 2048 - 2 * sizeof (void*));
- test_memalign ( 4096, 4096 - 2 * sizeof (void*));
- test_memalign ( 8192, 8192 - 2 * sizeof (void*));
- test_memalign (16384, 16384 - 2 * sizeof (void*));
- test_memalign (32768, 32768 - 2 * sizeof (void*));
- exit (0); /* success */
- }
- ],
- [glib_cv_compliant_posix_memalign=1], [], [:])
- :
- fi
- ])
-AS_IF([test "$glib_cv_compliant_posix_memalign" = "1"], [
- AC_MSG_RESULT(yes)
- AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size])
-], [
- AC_MSG_RESULT(no)
-])
-
dnl ****************************************
dnl *** strlcpy/strlcat ***
diff --git a/glib/gslice.c b/glib/gslice.c
index 48e4c5a33..d1b1fc639 100644
--- a/glib/gslice.c
+++ b/glib/gslice.c
@@ -19,11 +19,7 @@
#include "config.h"
#include "glibconfig.h"
-#if defined HAVE_POSIX_MEMALIGN && defined POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS
-# define HAVE_COMPLIANT_POSIX_MEMALIGN 1
-#endif
-
-#if defined(HAVE_COMPLIANT_POSIX_MEMALIGN) && !defined(_XOPEN_SOURCE)
+#if defined(HAVE_POSIX_MEMALIGN) && !defined(_XOPEN_SOURCE)
#define _XOPEN_SOURCE 600 /* posix_memalign() */
#endif
#include <stdlib.h> /* posix_memalign() */
@@ -416,7 +412,7 @@ g_slice_init_nomessage (void)
mem_assert ((sys_page_size & (sys_page_size - 1)) == 0);
slice_config_init (&allocator->config);
allocator->min_page_size = sys_page_size;
-#if HAVE_COMPLIANT_POSIX_MEMALIGN || HAVE_MEMALIGN
+#if HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN
/* allow allocation of pages up to 8KB (with 8KB alignment).
* this is useful because many medium to large sized structures
* fit less than 8 times (see [4]) into 4KB pages.
@@ -1394,13 +1390,12 @@ slab_allocator_free_chunk (gsize chunk_size,
/* from config.h:
* define HAVE_POSIX_MEMALIGN 1 // if free(posix_memalign(3)) works, <stdlib.h>
- * define HAVE_COMPLIANT_POSIX_MEMALIGN 1 // if free(posix_memalign(3)) works for sizes != 2^n, <stdlib.h>
* define HAVE_MEMALIGN 1 // if free(memalign(3)) works, <malloc.h>
* define HAVE_VALLOC 1 // if free(valloc(3)) works, <stdlib.h> or <malloc.h>
* if none is provided, we implement malloc(3)-based alloc-only page alignment
*/
-#if !(HAVE_COMPLIANT_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC)
+#if !(HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC)
static GTrashStack *compat_valloc_trash = NULL;
#endif
@@ -1410,7 +1405,7 @@ allocator_memalign (gsize alignment,
{
gpointer aligned_memory = NULL;
gint err = ENOMEM;
-#if HAVE_COMPLIANT_POSIX_MEMALIGN
+#if HAVE_POSIX_MEMALIGN
err = posix_memalign (&aligned_memory, alignment, memsize);
#elif HAVE_MEMALIGN
errno = 0;
@@ -1454,7 +1449,7 @@ static void
allocator_memfree (gsize memsize,
gpointer mem)
{
-#if HAVE_COMPLIANT_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC
+#if HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC
free (mem);
#else
mem_assert (memsize <= sys_page_size);