Message ID | 56A26836.5020509@redhat.com |
---|---|
State | New |
Headers | show |
On 01/22/2016 06:34 PM, Florian Weimer wrote: > I haven't finished the mallopt approach. It seems that my mental model > how the test works is wrong. Two threads with eight arenas appear to > trigger the issue reliably, but I want to test on a larger machine as > well, to make sure the test is any good there. The problem there is > that I wasn't … able to find sufficiently large box. That has now changed, and I can confirm that the bug still reproduces with the changed test. Chris, can you confirm that the tweaked test addresses your problem? Then I'll send a real patch for review. Thanks, Florian
On 1/22/2016 2:00 PM, Florian Weimer wrote: > On 01/22/2016 06:34 PM, Florian Weimer wrote: >> I haven't finished the mallopt approach. It seems that my mental model >> how the test works is wrong. Two threads with eight arenas appear to >> trigger the issue reliably, but I want to test on a larger machine as >> well, to make sure the test is any good there. The problem there is >> that I wasn't > … able to find sufficiently large box. That has now changed, and I can > confirm that the bug still reproduces with the changed test. > > Chris, can you confirm that the tweaked test addresses your problem? > Then I'll send a real patch for review. Yes, with your patch the test passes, in just over 5 seconds of runtime. Thanks!
On 01/23/2016 03:59 AM, Chris Metcalf wrote: > On 1/22/2016 2:00 PM, Florian Weimer wrote: >> On 01/22/2016 06:34 PM, Florian Weimer wrote: >>> I haven't finished the mallopt approach. It seems that my mental model >>> how the test works is wrong. Two threads with eight arenas appear to >>> trigger the issue reliably, but I want to test on a larger machine as >>> well, to make sure the test is any good there. The problem there is >>> that I wasn't >> … able to find sufficiently large box. That has now changed, and I can >> confirm that the bug still reproduces with the changed test. >> >> Chris, can you confirm that the tweaked test addresses your problem? >> Then I'll send a real patch for review. > > Yes, with your patch the test passes, in just over 5 seconds of runtime. Did you try this patch with the fix backed out? Does it still fail? Thanks, Florian
On 01/25/2016 06:05 AM, Florian Weimer wrote: > On 01/23/2016 03:59 AM, Chris Metcalf wrote: >> On 1/22/2016 2:00 PM, Florian Weimer wrote: >>> On 01/22/2016 06:34 PM, Florian Weimer wrote: >>>> I haven't finished the mallopt approach. It seems that my mental model >>>> how the test works is wrong. Two threads with eight arenas appear to >>>> trigger the issue reliably, but I want to test on a larger machine as >>>> well, to make sure the test is any good there. The problem there is >>>> that I wasn't >>> … able to find sufficiently large box. That has now changed, and I can >>> confirm that the bug still reproduces with the changed test. >>> >>> Chris, can you confirm that the tweaked test addresses your problem? >>> Then I'll send a real patch for review. >> Yes, with your patch the test passes, in just over 5 seconds of runtime. > Did you try this patch with the fix backed out? Does it still fail? I reverted your change to malloc/arena.c and the test failed with an abort.
diff --git a/malloc/tst-malloc-thread-exit.c b/malloc/tst-malloc-thread-exit.c index f4aa21a..e1c8972 100644 --- a/malloc/tst-malloc-thread-exit.c +++ b/malloc/tst-malloc-thread-exit.c @@ -26,6 +26,7 @@ particularly related to the arena free list. */ #include <errno.h> +#include <malloc.h> #include <pthread.h> #include <stdbool.h> #include <stdio.h> @@ -153,19 +154,18 @@ outer_thread (void *closure) return NULL; } + static int do_test (void) { - /* The number of top-level threads should be equal to the number of - arenas. See arena_get2. */ - long outer_thread_count = sysconf (_SC_NPROCESSORS_ONLN); - if (outer_thread_count >= 1) + /* The number of threads should be smaller than the number of + arenas, so that there will be some free arenas to add to the + arena free list. */ + enum { outer_thread_count = 2 }; + if (mallopt (M_ARENA_MAX, 8) == 0) { - /* See NARENAS_FROM_NCORES in malloc.c. */ - if (sizeof (long) == 4) - outer_thread_count *= 2; - else - outer_thread_count *= 8; + printf ("error: mallopt (M_ARENA_MAX) failed\n"); + return 1; } /* Leave some room for shutting down all threads gracefully. */