Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH] glibc: malloc: Add missing arena lock in malloc_info
@ 2017-11-20  7:44 Zhixiong Chi
  2017-11-21  5:52 ` Khem Raj
  2017-11-21 23:05 ` Burton, Ross
  0 siblings, 2 replies; 7+ messages in thread
From: Zhixiong Chi @ 2017-11-20  7:44 UTC (permalink / raw)
  To: openembedded-core

There are the multiple process crashes seen while using malloc_info.
Obtain the size information while the arena lock is acquired, and only
print it later.

Backport patch from https://sourceware.org/git/gitweb.cgi?p=glibc.git;
h=7a9368a1174cb15b9f1d6342e0e10dd90dae238d

Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
---
 ...loc-add-missing-arena-lock-in-malloc-info.patch | 172 +++++++++++++++++++++
 meta/recipes-core/glibc/glibc_2.26.bb              |   1 +
 2 files changed, 173 insertions(+)
 create mode 100644 meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch

diff --git a/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch b/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch
new file mode 100644
index 0000000..e12400d
--- /dev/null
+++ b/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch
@@ -0,0 +1,172 @@
+From: Florian Weimer <fweimer@redhat.com>
+Date: Wed, 15 Nov 2017 11:39:01 +0100
+Subject: [PATCH] malloc: Add missing arena lock in malloc_info [BZ #22408]
+
+Obtain the size information while the arena lock is acquired, and only
+print it later.
+
+Upstream-Status: Backport
+
+Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
+
+Index: git/malloc/Makefile
+===================================================================
+--- git.orig/malloc/Makefile	2017-09-04 17:34:06.758018978 +0800
++++ git/malloc/Makefile	2017-11-20 14:57:43.440337572 +0800
+@@ -34,6 +34,7 @@
+ 	 tst-interpose-nothread \
+ 	 tst-interpose-thread \
+ 	 tst-alloc_buffer \
++	 tst-malloc_info \
+ 
+ tests-static := \
+ 	 tst-interpose-static-nothread \
+@@ -242,3 +243,5 @@
+ $(objpfx)tst-dynarray-fail-mem.out: $(objpfx)tst-dynarray-fail.out
+ 	$(common-objpfx)malloc/mtrace $(objpfx)tst-dynarray-fail.mtrace > $@; \
+ 	$(evaluate-test)
++
++$(objpfx)tst-malloc_info: $(shared-thread-library)
+Index: git/malloc/malloc.c
+===================================================================
+--- git.orig/malloc/malloc.c	2017-09-04 17:34:06.758018978 +0800
++++ git/malloc/malloc.c	2017-11-20 15:01:02.412338959 +0800
+@@ -5547,6 +5547,15 @@
+ 	  avail += sizes[NFASTBINS - 1 + i].total;
+ 	}
+ 
++      size_t heap_size = 0;
++      size_t heap_mprotect_size = 0;
++      if (ar_ptr != &main_arena)
++	{
++	  heap_info *heap = heap_for_ptr (top (ar_ptr));
++	  heap_size = heap->size;
++	  heap_mprotect_size = heap->mprotect_size;
++	}
++
+       __libc_lock_unlock (ar_ptr->mutex);
+ 
+       total_nfastblocks += nfastblocks;
+@@ -5580,13 +5589,12 @@
+ 
+       if (ar_ptr != &main_arena)
+ 	{
+-	  heap_info *heap = heap_for_ptr (top (ar_ptr));
+ 	  fprintf (fp,
+ 		   "<aspace type=\"total\" size=\"%zu\"/>\n"
+ 		   "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+-		   heap->size, heap->mprotect_size);
+-	  total_aspace += heap->size;
+-	  total_aspace_mprotect += heap->mprotect_size;
++		   heap_size, heap_mprotect_size);
++	  total_aspace += heap_size;
++	  total_aspace_mprotect += heap_mprotect_size;
+ 	}
+       else
+ 	{
+Index: git/malloc/tst-malloc_info.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ git/malloc/tst-malloc_info.c	2017-11-20 15:02:03.208339383 +0800
+@@ -0,0 +1,101 @@
++/* Smoke test for malloc_info.
++   Copyright (C) 2017 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library 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.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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 the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* The purpose of this test is to provide a quick way to run
++   malloc_info in a multi-threaded process.  */
++
++#include <array_length.h>
++#include <malloc.h>
++#include <stdlib.h>
++#include <support/support.h>
++#include <support/xthread.h>
++
++/* This barrier is used to have the main thread wait until the helper
++   threads have performed their allocations.  */
++static pthread_barrier_t barrier;
++
++enum
++  {
++    /* Number of threads performing allocations.  */
++    thread_count  = 4,
++
++    /* Amount of memory allocation per thread.  This should be large
++       enough to cause the allocation of multiple heaps per arena.  */
++    per_thread_allocations
++      = sizeof (void *) == 4 ? 16 * 1024 * 1024 : 128 * 1024 * 1024,
++  };
++
++static void *
++allocation_thread_function (void *closure)
++{
++  struct list
++  {
++    struct list *next;
++    long dummy[4];
++  };
++
++  struct list *head = NULL;
++  size_t allocated = 0;
++  while (allocated < per_thread_allocations)
++    {
++      struct list *new_head = xmalloc (sizeof (*new_head));
++      allocated += sizeof (*new_head);
++      new_head->next = head;
++      head = new_head;
++    }
++
++  xpthread_barrier_wait (&barrier);
++
++  /* Main thread prints first statistics here.  */
++
++  xpthread_barrier_wait (&barrier);
++
++  while (head != NULL)
++    {
++      struct list *next_head = head->next;
++      free (head);
++      head = next_head;
++    }
++
++  return NULL;
++}
++
++static int
++do_test (void)
++{
++  xpthread_barrier_init (&barrier, NULL, thread_count + 1);
++
++  pthread_t threads[thread_count];
++  for (size_t i = 0; i < array_length (threads); ++i)
++    threads[i] = xpthread_create (NULL, allocation_thread_function, NULL);
++
++  xpthread_barrier_wait (&barrier);
++  puts ("info: After allocation:");
++  malloc_info (0, stdout);
++
++  xpthread_barrier_wait (&barrier);
++  for (size_t i = 0; i < array_length (threads); ++i)
++    xpthread_join (threads[i]);
++
++  puts ("\ninfo: After deallocation:");
++  malloc_info (0, stdout);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/meta/recipes-core/glibc/glibc_2.26.bb b/meta/recipes-core/glibc/glibc_2.26.bb
index 135ec4f..05d1e2c 100644
--- a/meta/recipes-core/glibc/glibc_2.26.bb
+++ b/meta/recipes-core/glibc/glibc_2.26.bb
@@ -43,6 +43,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
            file://0026-assert-Suppress-pedantic-warning-caused-by-statement.patch \
            file://0027-glibc-reset-dl-load-write-lock-after-forking.patch \
            file://0028-Bug-4578-add-ld.so-lock-while-fork.patch \
+           file://0029-malloc-add-missing-arena-lock-in-malloc-info.patch \
 "
 
 NATIVESDKFIXES ?= ""
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] glibc: malloc: Add missing arena lock in malloc_info
  2017-11-20  7:44 [PATCH] glibc: malloc: Add missing arena lock in malloc_info Zhixiong Chi
@ 2017-11-21  5:52 ` Khem Raj
  2017-11-21 23:05 ` Burton, Ross
  1 sibling, 0 replies; 7+ messages in thread
From: Khem Raj @ 2017-11-21  5:52 UTC (permalink / raw)
  To: Zhixiong Chi; +Cc: Patches and discussions about the oe-core layer

On Sun, Nov 19, 2017 at 11:44 PM, Zhixiong Chi
<zhixiong.chi@windriver.com> wrote:
> There are the multiple process crashes seen while using malloc_info.
> Obtain the size information while the arena lock is acquired, and only
> print it later.
>
> Backport patch from https://sourceware.org/git/gitweb.cgi?p=glibc.git;
> h=7a9368a1174cb15b9f1d6342e0e10dd90dae238d
>

this is fine

> Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
> ---
>  ...loc-add-missing-arena-lock-in-malloc-info.patch | 172 +++++++++++++++++++++
>  meta/recipes-core/glibc/glibc_2.26.bb              |   1 +
>  2 files changed, 173 insertions(+)
>  create mode 100644 meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch
>
> diff --git a/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch b/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch
> new file mode 100644
> index 0000000..e12400d
> --- /dev/null
> +++ b/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch
> @@ -0,0 +1,172 @@
> +From: Florian Weimer <fweimer@redhat.com>
> +Date: Wed, 15 Nov 2017 11:39:01 +0100
> +Subject: [PATCH] malloc: Add missing arena lock in malloc_info [BZ #22408]
> +
> +Obtain the size information while the arena lock is acquired, and only
> +print it later.
> +
> +Upstream-Status: Backport
> +
> +Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
> +
> +Index: git/malloc/Makefile
> +===================================================================
> +--- git.orig/malloc/Makefile   2017-09-04 17:34:06.758018978 +0800
> ++++ git/malloc/Makefile        2017-11-20 14:57:43.440337572 +0800
> +@@ -34,6 +34,7 @@
> +        tst-interpose-nothread \
> +        tst-interpose-thread \
> +        tst-alloc_buffer \
> ++       tst-malloc_info \
> +
> + tests-static := \
> +        tst-interpose-static-nothread \
> +@@ -242,3 +243,5 @@
> + $(objpfx)tst-dynarray-fail-mem.out: $(objpfx)tst-dynarray-fail.out
> +       $(common-objpfx)malloc/mtrace $(objpfx)tst-dynarray-fail.mtrace > $@; \
> +       $(evaluate-test)
> ++
> ++$(objpfx)tst-malloc_info: $(shared-thread-library)
> +Index: git/malloc/malloc.c
> +===================================================================
> +--- git.orig/malloc/malloc.c   2017-09-04 17:34:06.758018978 +0800
> ++++ git/malloc/malloc.c        2017-11-20 15:01:02.412338959 +0800
> +@@ -5547,6 +5547,15 @@
> +         avail += sizes[NFASTBINS - 1 + i].total;
> +       }
> +
> ++      size_t heap_size = 0;
> ++      size_t heap_mprotect_size = 0;
> ++      if (ar_ptr != &main_arena)
> ++      {
> ++        heap_info *heap = heap_for_ptr (top (ar_ptr));
> ++        heap_size = heap->size;
> ++        heap_mprotect_size = heap->mprotect_size;
> ++      }
> ++
> +       __libc_lock_unlock (ar_ptr->mutex);
> +
> +       total_nfastblocks += nfastblocks;
> +@@ -5580,13 +5589,12 @@
> +
> +       if (ar_ptr != &main_arena)
> +       {
> +-        heap_info *heap = heap_for_ptr (top (ar_ptr));
> +         fprintf (fp,
> +                  "<aspace type=\"total\" size=\"%zu\"/>\n"
> +                  "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
> +-                 heap->size, heap->mprotect_size);
> +-        total_aspace += heap->size;
> +-        total_aspace_mprotect += heap->mprotect_size;
> ++                 heap_size, heap_mprotect_size);
> ++        total_aspace += heap_size;
> ++        total_aspace_mprotect += heap_mprotect_size;
> +       }
> +       else
> +       {
> +Index: git/malloc/tst-malloc_info.c
> +===================================================================
> +--- /dev/null  1970-01-01 00:00:00.000000000 +0000
> ++++ git/malloc/tst-malloc_info.c       2017-11-20 15:02:03.208339383 +0800
> +@@ -0,0 +1,101 @@
> ++/* Smoke test for malloc_info.
> ++   Copyright (C) 2017 Free Software Foundation, Inc.
> ++   This file is part of the GNU C Library.
> ++
> ++   The GNU C Library 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.1 of the License, or (at your option) any later version.
> ++
> ++   The GNU C Library 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 the GNU C Library; if not, see
> ++   <http://www.gnu.org/licenses/>.  */
> ++
> ++/* The purpose of this test is to provide a quick way to run
> ++   malloc_info in a multi-threaded process.  */
> ++
> ++#include <array_length.h>
> ++#include <malloc.h>
> ++#include <stdlib.h>
> ++#include <support/support.h>
> ++#include <support/xthread.h>
> ++
> ++/* This barrier is used to have the main thread wait until the helper
> ++   threads have performed their allocations.  */
> ++static pthread_barrier_t barrier;
> ++
> ++enum
> ++  {
> ++    /* Number of threads performing allocations.  */
> ++    thread_count  = 4,
> ++
> ++    /* Amount of memory allocation per thread.  This should be large
> ++       enough to cause the allocation of multiple heaps per arena.  */
> ++    per_thread_allocations
> ++      = sizeof (void *) == 4 ? 16 * 1024 * 1024 : 128 * 1024 * 1024,
> ++  };
> ++
> ++static void *
> ++allocation_thread_function (void *closure)
> ++{
> ++  struct list
> ++  {
> ++    struct list *next;
> ++    long dummy[4];
> ++  };
> ++
> ++  struct list *head = NULL;
> ++  size_t allocated = 0;
> ++  while (allocated < per_thread_allocations)
> ++    {
> ++      struct list *new_head = xmalloc (sizeof (*new_head));
> ++      allocated += sizeof (*new_head);
> ++      new_head->next = head;
> ++      head = new_head;
> ++    }
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++
> ++  /* Main thread prints first statistics here.  */
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++
> ++  while (head != NULL)
> ++    {
> ++      struct list *next_head = head->next;
> ++      free (head);
> ++      head = next_head;
> ++    }
> ++
> ++  return NULL;
> ++}
> ++
> ++static int
> ++do_test (void)
> ++{
> ++  xpthread_barrier_init (&barrier, NULL, thread_count + 1);
> ++
> ++  pthread_t threads[thread_count];
> ++  for (size_t i = 0; i < array_length (threads); ++i)
> ++    threads[i] = xpthread_create (NULL, allocation_thread_function, NULL);
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++  puts ("info: After allocation:");
> ++  malloc_info (0, stdout);
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++  for (size_t i = 0; i < array_length (threads); ++i)
> ++    xpthread_join (threads[i]);
> ++
> ++  puts ("\ninfo: After deallocation:");
> ++  malloc_info (0, stdout);
> ++
> ++  return 0;
> ++}
> ++
> ++#include <support/test-driver.c>
> diff --git a/meta/recipes-core/glibc/glibc_2.26.bb b/meta/recipes-core/glibc/glibc_2.26.bb
> index 135ec4f..05d1e2c 100644
> --- a/meta/recipes-core/glibc/glibc_2.26.bb
> +++ b/meta/recipes-core/glibc/glibc_2.26.bb
> @@ -43,6 +43,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
>             file://0026-assert-Suppress-pedantic-warning-caused-by-statement.patch \
>             file://0027-glibc-reset-dl-load-write-lock-after-forking.patch \
>             file://0028-Bug-4578-add-ld.so-lock-while-fork.patch \
> +           file://0029-malloc-add-missing-arena-lock-in-malloc-info.patch \
>  "
>
>  NATIVESDKFIXES ?= ""
> --
> 1.9.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] glibc: malloc: Add missing arena lock in malloc_info
  2017-11-20  7:44 [PATCH] glibc: malloc: Add missing arena lock in malloc_info Zhixiong Chi
  2017-11-21  5:52 ` Khem Raj
@ 2017-11-21 23:05 ` Burton, Ross
  2017-11-22  0:50   ` Andre McCurdy
  1 sibling, 1 reply; 7+ messages in thread
From: Burton, Ross @ 2017-11-21 23:05 UTC (permalink / raw)
  To: Zhixiong Chi; +Cc: OE-core

[-- Attachment #1: Type: text/plain, Size: 8218 bytes --]

What glibc release is this in?  We've an upgrade patch pending that bumps
it to 77f921dac17c5fa99bd9e926d926c327982895f7.

Ross

On 20 November 2017 at 07:44, Zhixiong Chi <zhixiong.chi@windriver.com>
wrote:

> There are the multiple process crashes seen while using malloc_info.
> Obtain the size information while the arena lock is acquired, and only
> print it later.
>
> Backport patch from https://sourceware.org/git/gitweb.cgi?p=glibc.git;
> h=7a9368a1174cb15b9f1d6342e0e10dd90dae238d
>
> Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
> ---
>  ...loc-add-missing-arena-lock-in-malloc-info.patch | 172
> +++++++++++++++++++++
>  meta/recipes-core/glibc/glibc_2.26.bb              |   1 +
>  2 files changed, 173 insertions(+)
>  create mode 100644 meta/recipes-core/glibc/glibc/
> 0029-malloc-add-missing-arena-lock-in-malloc-info.patch
>
> diff --git a/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-
> arena-lock-in-malloc-info.patch b/meta/recipes-core/glibc/
> glibc/0029-malloc-add-missing-arena-lock-in-malloc-info.patch
> new file mode 100644
> index 0000000..e12400d
> --- /dev/null
> +++ b/meta/recipes-core/glibc/glibc/0029-malloc-add-missing-
> arena-lock-in-malloc-info.patch
> @@ -0,0 +1,172 @@
> +From: Florian Weimer <fweimer@redhat.com>
> +Date: Wed, 15 Nov 2017 11:39:01 +0100
> +Subject: [PATCH] malloc: Add missing arena lock in malloc_info [BZ #22408]
> +
> +Obtain the size information while the arena lock is acquired, and only
> +print it later.
> +
> +Upstream-Status: Backport
> +
> +Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
> +
> +Index: git/malloc/Makefile
> +===================================================================
> +--- git.orig/malloc/Makefile   2017-09-04 17:34:06.758018978 +0800
> ++++ git/malloc/Makefile        2017-11-20 14:57:43.440337572 +0800
> +@@ -34,6 +34,7 @@
> +        tst-interpose-nothread \
> +        tst-interpose-thread \
> +        tst-alloc_buffer \
> ++       tst-malloc_info \
> +
> + tests-static := \
> +        tst-interpose-static-nothread \
> +@@ -242,3 +243,5 @@
> + $(objpfx)tst-dynarray-fail-mem.out: $(objpfx)tst-dynarray-fail.out
> +       $(common-objpfx)malloc/mtrace $(objpfx)tst-dynarray-fail.mtrace >
> $@; \
> +       $(evaluate-test)
> ++
> ++$(objpfx)tst-malloc_info: $(shared-thread-library)
> +Index: git/malloc/malloc.c
> +===================================================================
> +--- git.orig/malloc/malloc.c   2017-09-04 17:34:06.758018978 +0800
> ++++ git/malloc/malloc.c        2017-11-20 15:01:02.412338959 +0800
> +@@ -5547,6 +5547,15 @@
> +         avail += sizes[NFASTBINS - 1 + i].total;
> +       }
> +
> ++      size_t heap_size = 0;
> ++      size_t heap_mprotect_size = 0;
> ++      if (ar_ptr != &main_arena)
> ++      {
> ++        heap_info *heap = heap_for_ptr (top (ar_ptr));
> ++        heap_size = heap->size;
> ++        heap_mprotect_size = heap->mprotect_size;
> ++      }
> ++
> +       __libc_lock_unlock (ar_ptr->mutex);
> +
> +       total_nfastblocks += nfastblocks;
> +@@ -5580,13 +5589,12 @@
> +
> +       if (ar_ptr != &main_arena)
> +       {
> +-        heap_info *heap = heap_for_ptr (top (ar_ptr));
> +         fprintf (fp,
> +                  "<aspace type=\"total\" size=\"%zu\"/>\n"
> +                  "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
> +-                 heap->size, heap->mprotect_size);
> +-        total_aspace += heap->size;
> +-        total_aspace_mprotect += heap->mprotect_size;
> ++                 heap_size, heap_mprotect_size);
> ++        total_aspace += heap_size;
> ++        total_aspace_mprotect += heap_mprotect_size;
> +       }
> +       else
> +       {
> +Index: git/malloc/tst-malloc_info.c
> +===================================================================
> +--- /dev/null  1970-01-01 00:00:00.000000000 +0000
> ++++ git/malloc/tst-malloc_info.c       2017-11-20 15:02:03.208339383 +0800
> +@@ -0,0 +1,101 @@
> ++/* Smoke test for malloc_info.
> ++   Copyright (C) 2017 Free Software Foundation, Inc.
> ++   This file is part of the GNU C Library.
> ++
> ++   The GNU C Library 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.1 of the License, or (at your option) any later version.
> ++
> ++   The GNU C Library 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 the GNU C Library; if not, see
> ++   <http://www.gnu.org/licenses/>.  */
> ++
> ++/* The purpose of this test is to provide a quick way to run
> ++   malloc_info in a multi-threaded process.  */
> ++
> ++#include <array_length.h>
> ++#include <malloc.h>
> ++#include <stdlib.h>
> ++#include <support/support.h>
> ++#include <support/xthread.h>
> ++
> ++/* This barrier is used to have the main thread wait until the helper
> ++   threads have performed their allocations.  */
> ++static pthread_barrier_t barrier;
> ++
> ++enum
> ++  {
> ++    /* Number of threads performing allocations.  */
> ++    thread_count  = 4,
> ++
> ++    /* Amount of memory allocation per thread.  This should be large
> ++       enough to cause the allocation of multiple heaps per arena.  */
> ++    per_thread_allocations
> ++      = sizeof (void *) == 4 ? 16 * 1024 * 1024 : 128 * 1024 * 1024,
> ++  };
> ++
> ++static void *
> ++allocation_thread_function (void *closure)
> ++{
> ++  struct list
> ++  {
> ++    struct list *next;
> ++    long dummy[4];
> ++  };
> ++
> ++  struct list *head = NULL;
> ++  size_t allocated = 0;
> ++  while (allocated < per_thread_allocations)
> ++    {
> ++      struct list *new_head = xmalloc (sizeof (*new_head));
> ++      allocated += sizeof (*new_head);
> ++      new_head->next = head;
> ++      head = new_head;
> ++    }
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++
> ++  /* Main thread prints first statistics here.  */
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++
> ++  while (head != NULL)
> ++    {
> ++      struct list *next_head = head->next;
> ++      free (head);
> ++      head = next_head;
> ++    }
> ++
> ++  return NULL;
> ++}
> ++
> ++static int
> ++do_test (void)
> ++{
> ++  xpthread_barrier_init (&barrier, NULL, thread_count + 1);
> ++
> ++  pthread_t threads[thread_count];
> ++  for (size_t i = 0; i < array_length (threads); ++i)
> ++    threads[i] = xpthread_create (NULL, allocation_thread_function,
> NULL);
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++  puts ("info: After allocation:");
> ++  malloc_info (0, stdout);
> ++
> ++  xpthread_barrier_wait (&barrier);
> ++  for (size_t i = 0; i < array_length (threads); ++i)
> ++    xpthread_join (threads[i]);
> ++
> ++  puts ("\ninfo: After deallocation:");
> ++  malloc_info (0, stdout);
> ++
> ++  return 0;
> ++}
> ++
> ++#include <support/test-driver.c>
> diff --git a/meta/recipes-core/glibc/glibc_2.26.bb
> b/meta/recipes-core/glibc/glibc_2.26.bb
> index 135ec4f..05d1e2c 100644
> --- a/meta/recipes-core/glibc/glibc_2.26.bb
> +++ b/meta/recipes-core/glibc/glibc_2.26.bb
> @@ -43,6 +43,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc
> \
>             file://0026-assert-Suppress-pedantic-warning-caused-by-statement.patch
> \
>             file://0027-glibc-reset-dl-load-write-lock-after-forking.patch
> \
>             file://0028-Bug-4578-add-ld.so-lock-while-fork.patch \
> +           file://0029-malloc-add-missing-arena-lock-in-malloc-info.patch
> \
>  "
>
>  NATIVESDKFIXES ?= ""
> --
> 1.9.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>

[-- Attachment #2: Type: text/html, Size: 10575 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] glibc: malloc: Add missing arena lock in malloc_info
  2017-11-21 23:05 ` Burton, Ross
@ 2017-11-22  0:50   ` Andre McCurdy
  2017-11-23 11:58     ` Burton, Ross
  0 siblings, 1 reply; 7+ messages in thread
From: Andre McCurdy @ 2017-11-22  0:50 UTC (permalink / raw)
  To: Burton, Ross; +Cc: OE-core

On Tue, Nov 21, 2017 at 3:05 PM, Burton, Ross <ross.burton@intel.com> wrote:
> What glibc release is this in?  We've an upgrade patch pending that bumps it
> to 77f921dac17c5fa99bd9e926d926c327982895f7.

It's currently in the glibc master branch only (ie hasn't been
backported to the 2.26 release branch).


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] glibc: malloc: Add missing arena lock in malloc_info
  2017-11-22  0:50   ` Andre McCurdy
@ 2017-11-23 11:58     ` Burton, Ross
  2017-11-24  4:32       ` Zhixiong Chi
  0 siblings, 1 reply; 7+ messages in thread
From: Burton, Ross @ 2017-11-23 11:58 UTC (permalink / raw)
  To: Zhixiong Chi; +Cc: OE-core

[-- Attachment #1: Type: text/plain, Size: 597 bytes --]

Thanks Andre.  There's a glibc 2.26 upgrade pending and this doesn't apply
on top of that, can you rebase?  poky-contrib:ross/mut2 is where I'm
staging the toolchain updates.

Ross

On 22 November 2017 at 00:50, Andre McCurdy <armccurdy@gmail.com> wrote:

> On Tue, Nov 21, 2017 at 3:05 PM, Burton, Ross <ross.burton@intel.com>
> wrote:
> > What glibc release is this in?  We've an upgrade patch pending that
> bumps it
> > to 77f921dac17c5fa99bd9e926d926c327982895f7.
>
> It's currently in the glibc master branch only (ie hasn't been
> backported to the 2.26 release branch).
>

[-- Attachment #2: Type: text/html, Size: 1020 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] glibc: malloc: Add missing arena lock in malloc_info
  2017-11-23 11:58     ` Burton, Ross
@ 2017-11-24  4:32       ` Zhixiong Chi
  2017-11-24 15:29         ` Burton, Ross
  0 siblings, 1 reply; 7+ messages in thread
From: Zhixiong Chi @ 2017-11-24  4:32 UTC (permalink / raw)
  To: Burton, Ross; +Cc: OE-core

[-- Attachment #1: Type: text/plain, Size: 945 bytes --]

Hi Ross,
Is your meaning that I regenerate this patch based on 
poky-contrib:ross/mut2 branch?

Thanks.

On 2017年11月23日 19:58, Burton, Ross wrote:
> Thanks Andre.  There's a glibc 2.26 upgrade pending and this doesn't 
> apply on top of that, can you rebase?  poky-contrib:ross/mut2 is where 
> I'm staging the toolchain updates.
>
> Ross
>
> On 22 November 2017 at 00:50, Andre McCurdy <armccurdy@gmail.com 
> <mailto:armccurdy@gmail.com>> wrote:
>
>     On Tue, Nov 21, 2017 at 3:05 PM, Burton, Ross
>     <ross.burton@intel.com <mailto:ross.burton@intel.com>> wrote:
>     > What glibc release is this in?  We've an upgrade patch pending
>     that bumps it
>     > to 77f921dac17c5fa99bd9e926d926c327982895f7.
>
>     It's currently in the glibc master branch only (ie hasn't been
>     backported to the 2.26 release branch).
>
>

-- 
---------------------
Thanks,
Zhixiong Chi
Tel: +86-10-8477-7036


[-- Attachment #2: Type: text/html, Size: 2154 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] glibc: malloc: Add missing arena lock in malloc_info
  2017-11-24  4:32       ` Zhixiong Chi
@ 2017-11-24 15:29         ` Burton, Ross
  0 siblings, 0 replies; 7+ messages in thread
From: Burton, Ross @ 2017-11-24 15:29 UTC (permalink / raw)
  To: Zhixiong Chi; +Cc: OE-core

[-- Attachment #1: Type: text/plain, Size: 1023 bytes --]

Yes, please.

Ross

On 24 November 2017 at 04:32, Zhixiong Chi <zhixiong.chi@windriver.com>
wrote:

> Hi Ross,
> Is your meaning that I regenerate this patch based on
> poky-contrib:ross/mut2 branch?
>
> Thanks.
>
>
> On 2017年11月23日 19:58, Burton, Ross wrote:
>
> Thanks Andre.  There's a glibc 2.26 upgrade pending and this doesn't apply
> on top of that, can you rebase?  poky-contrib:ross/mut2 is where I'm
> staging the toolchain updates.
>
> Ross
>
> On 22 November 2017 at 00:50, Andre McCurdy <armccurdy@gmail.com> wrote:
>
>> On Tue, Nov 21, 2017 at 3:05 PM, Burton, Ross <ross.burton@intel.com>
>> wrote:
>> > What glibc release is this in?  We've an upgrade patch pending that
>> bumps it
>> > to 77f921dac17c5fa99bd9e926d926c327982895f7.
>>
>> It's currently in the glibc master branch only (ie hasn't been
>> backported to the 2.26 release branch).
>>
>
>
> --
> ---------------------
> Thanks,
> Zhixiong Chi
> Tel: +86-10-8477-7036 <+86%2010%208477%207036>
>
>

[-- Attachment #2: Type: text/html, Size: 2469 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-11-24 15:29 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-20  7:44 [PATCH] glibc: malloc: Add missing arena lock in malloc_info Zhixiong Chi
2017-11-21  5:52 ` Khem Raj
2017-11-21 23:05 ` Burton, Ross
2017-11-22  0:50   ` Andre McCurdy
2017-11-23 11:58     ` Burton, Ross
2017-11-24  4:32       ` Zhixiong Chi
2017-11-24 15:29         ` Burton, Ross

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox