You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2020/06/05 14:16:00 UTC

[jira] [Commented] (PROTON-2225) Set -DTHREADERCISER=ON by default, to prevent regressions

    [ https://issues.apache.org/jira/browse/PROTON-2225?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17126804#comment-17126804 ] 

ASF GitHub Bot commented on PROTON-2225:
----------------------------------------

jiridanek opened a new pull request #258:
URL: https://github.com/apache/qpid-proton/pull/258


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Set -DTHREADERCISER=ON by default, to prevent regressions
> ---------------------------------------------------------
>
>                 Key: PROTON-2225
>                 URL: https://issues.apache.org/jira/browse/PROTON-2225
>             Project: Qpid Proton
>          Issue Type: Test
>          Components: build
>    Affects Versions: proton-c-0.31.0
>            Reporter: Jiri Daněk
>            Assignee: Jiri Daněk
>            Priority: Major
>             Fix For: proton-c-0.32.0
>
>
> Previously, the test stopped compiling, as fixed in PROTON-2120. The reason the test is disabled is that the test is failing when it is run.
> Instead of disabling the test, it would be better to have the test running, suppress the reported errors and fill a jira to get them fixed eventually. This requires writing suppressions for both helgrind and tsan.
> Now that fd-limit test is disabled (PROTON-2172), we should have some other test to highlight issues from PROTON-2133.
> Current state is that threaderciser test builds and fails under helgrind with
> {noformat}
> threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> ==17017== ---Thread-Announcement------------------------------------------
> ==17017== 
> ==17017== Thread #5 was created
> ==17017==    at 0x4D69A3E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==    by 0x4863DBB: create_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x486568B: pthread_create@@GLIBC_2.2.5 (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x483E374: pthread_create_WRK (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483F46F: pthread_create@* (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x403C92: main (threaderciser.c:572)
> ==17017== 
> ==17017== ---Thread-Announcement------------------------------------------
> ==17017== 
> ==17017== Thread #2 was created
> ==17017==    at 0x4D69A3E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==    by 0x4863DBB: create_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x486568B: pthread_create@@GLIBC_2.2.5 (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x483E374: pthread_create_WRK (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483F46F: pthread_create@* (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x403C64: main (threaderciser.c:571)
> ==17017== 
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 4 at 0x4FDF90C by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4855143: post_event (epoll.c:2429)
> ==17017==    by 0x4855C40: proactor_do_epoll (epoll.c:2676)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdf90c is 12 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:post_event
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 4 at 0x4FDF940 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4855267: post_event (epoll.c:2455)
> ==17017==    by 0x4855C40: proactor_do_epoll (epoll.c:2676)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdf940 is 64 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:post_event
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 1 at 0x4FDFA11 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x485526E: post_event (epoll.c:2456)
> ==17017==    by 0x4855C40: proactor_do_epoll (epoll.c:2676)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa11 is 273 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:post_event
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 1 at 0x4FDFA12 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x485533F: post_event (epoll.c:2477)
> ==17017==    by 0x4855C40: proactor_do_epoll (epoll.c:2676)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa12 is 274 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:post_event
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 8 at 0x4FDFA00 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4855351: post_event (epoll.c:2477)
> ==17017==    by 0x4855C40: proactor_do_epoll (epoll.c:2676)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa00 is 256 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:post_event
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 8 at 0x4FDF9A8 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484FBAF: make_runnable (epoll.c:630)
> ==17017==    by 0x4855C57: proactor_do_epoll (epoll.c:2678)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdf9a8 is 168 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:make_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 1 at 0x4FDFA12 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484FC37: make_runnable (epoll.c:635)
> ==17017==    by 0x4855C57: proactor_do_epoll (epoll.c:2678)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa12 is 274 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:make_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 8 at 0x4FDFA08 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484FC50: make_runnable (epoll.c:638)
> ==17017==    by 0x4855C57: proactor_do_epoll (epoll.c:2678)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa08 is 264 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:make_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 8 at 0x4FDFA00 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484F853: assign_thread (epoll.c:539)
> ==17017==    by 0x48555E8: next_runnable (epoll.c:2539)
> ==17017==    by 0x48557CD: proactor_do_epoll (epoll.c:2578)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa00 is 256 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:assign_thread
>    fun:next_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 8 at 0x4FDFA08 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484F85E: assign_thread (epoll.c:540)
> ==17017==    by 0x48555E8: next_runnable (epoll.c:2539)
> ==17017==    by 0x48557CD: proactor_do_epoll (epoll.c:2578)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa08 is 264 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:assign_thread
>    fun:next_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 1 at 0x4FDFA10 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854E3B: process (epoll.c:2362)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfa10 is 272 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 4 at 0x4FDF9B0 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854E59: process (epoll.c:2368)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdf9b0 is 176 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 1 at 0x4FDFC69 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854F24: process (epoll.c:2382)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fdfc69 is 873 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ---Thread-Announcement------------------------------------------
> ==17017== 
> ==17017== Thread #4 was created
> ==17017==    at 0x4D69A3E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==    by 0x4863DBB: create_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x486568B: pthread_create@@GLIBC_2.2.5 (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x483E374: pthread_create_WRK (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483F46F: pthread_create@* (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x403C64: main (threaderciser.c:571)
> ==17017== 
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 1 at 0x4FE7802 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x48555CB: next_runnable (epoll.c:2538)
> ==17017==    by 0x48557CD: proactor_do_epoll (epoll.c:2578)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe7802 is 274 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:next_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 8 at 0x4FE77F0 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484F820: assign_thread (epoll.c:538)
> ==17017==    by 0x48555E8: next_runnable (epoll.c:2539)
> ==17017==    by 0x48557CD: proactor_do_epoll (epoll.c:2578)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe77f0 is 256 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:assign_thread
>    fun:next_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 1 at 0x4FE7802 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x484F86D: assign_thread (epoll.c:541)
> ==17017==    by 0x48555E8: next_runnable (epoll.c:2539)
> ==17017==    by 0x48557CD: proactor_do_epoll (epoll.c:2578)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe7802 is 274 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:assign_thread
>    fun:next_runnable
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 1 at 0x4FE7801 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854E30: process (epoll.c:2361)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe7801 is 273 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 4 at 0x4FE7730 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854F09: process (epoll.c:2380)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe7730 is 64 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during write of size 4 at 0x4FE7730 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854F19: process (epoll.c:2381)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe7730 is 64 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017==  Lock at 0x4FD4380 was first observed
> ==17017==    at 0x483F7BD: pthread_mutex_init (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EBFF: pmutex_init (epoll.c:137)
> ==17017==    by 0x485412D: pn_proactor (epoll.c:2104)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Address 0x4fd4380 is 576 bytes inside a block of size 896 alloc'd
> ==17017==    at 0x483A9F2: calloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48540BD: pn_proactor (epoll.c:2099)
> ==17017==    by 0x402F2D: global_init (threaderciser.c:335)
> ==17017==    by 0x403BD2: main (threaderciser.c:564)
> ==17017==  Block was alloc'd by thread #1
> ==17017== 
> ==17017== Possible data race during read of size 8 at 0x4FE7798 by thread #5
> ==17017== Locks held: 1, at address 0x4FD4380
> ==17017==    at 0x4854F43: process (epoll.c:2384)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Address 0x4fe7798 is 168 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #4
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
>    fun:mythread_wrapper
>    fun:start_thread
>    fun:clone
> }
> ==17017== ---Thread-Announcement------------------------------------------
> ==17017== 
> ==17017== Thread #3 was created
> ==17017==    at 0x4D69A3E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==    by 0x4863DBB: create_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x486568B: pthread_create@@GLIBC_2.2.5 (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x483E374: pthread_create_WRK (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483F46F: pthread_create@* (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x403C92: main (threaderciser.c:572)
> ==17017== 
> ==17017== ----------------------------------------------------------------
> ==17017== 
> ==17017== Possible data race during read of size 1 at 0x4FDF988 by thread #5
> ==17017== Locks held: none
> ==17017==    at 0x483B42C: my_memcmp (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483B6D9: mutex_destroy_WRK (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483F849: pthread_mutex_destroy (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EC2E: pmutex_finalize (epoll.c:143)
> ==17017==    by 0x484F26F: pcontext_finalize (epoll.c:348)
> ==17017==    by 0x4850A05: pconnection_final_free (epoll.c:944)
> ==17017==    by 0x4850B31: pconnection_cleanup (epoll.c:967)
> ==17017==    by 0x4851B42: pconnection_process (epoll.c:1337)
> ==17017==    by 0x4854F71: process (epoll.c:2385)
> ==17017==    by 0x48557F3: proactor_do_epoll (epoll.c:2581)
> ==17017==    by 0x4856402: pn_proactor_wait (epoll.c:2803)
> ==17017==    by 0x40362D: proactor_thread (threaderciser.c:473)
> ==17017== 
> ==17017== This conflicts with a previous write of size 4 by thread #3
> ==17017== Locks held: none
> ==17017==    at 0x4868E17: __pthread_mutex_unlock_usercnt (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x483BEEB: mutex_unlock_WRK (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x483F875: pthread_mutex_unlock (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x484EC62: unlock (epoll.c:145)
> ==17017==    by 0x485135E: pconnection_done (epoll.c:1163)
> ==17017==    by 0x485650E: pn_proactor_done (epoll.c:2829)
> ==17017==    by 0x403696: proactor_thread (threaderciser.c:478)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==  Address 0x4fdf988 is 136 bytes inside a block of size 909 alloc'd
> ==17017==    at 0x48387A3: malloc (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x48524FA: pn_proactor_connect2 (epoll.c:1545)
> ==17017==    by 0x4857024: pn_proactor_connect (proactor-internal.c:97)
> ==17017==    by 0x402B23: cpool_connect (threaderciser.c:229)
> ==17017==    by 0x403120: global_connect (threaderciser.c:367)
> ==17017==    by 0x4031A5: global_do_stuff (threaderciser.c:378)
> ==17017==    by 0x403330: user_thread (threaderciser.c:397)
> ==17017==    by 0x483E568: mythread_wrapper (in /nix/store/6glsqxyngs9kjkx9mqhshwfi93qfsw8q-valgrind-3.15.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
> ==17017==    by 0x4864EDC: start_thread (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libpthread-2.30.so)
> ==17017==    by 0x4D69A4E: clone (in /nix/store/6m2k8kx8h216jlx9dg3lp4m90bz05yck-glibc-2.30/lib/libc-2.30.so)
> ==17017==  Block was alloc'd by thread #2
> ==17017== 
> {
>    <insert_a_suppression_name_here>
>    Helgrind:Race
>    fun:my_memcmp
>    fun:mutex_destroy_WRK
>    fun:pthread_mutex_destroy
>    fun:pmutex_finalize
>    fun:pcontext_finalize
>    fun:pconnection_final_free
>    fun:pconnection_cleanup
>    fun:pconnection_process
>    fun:process
>    fun:proactor_do_epoll
>    fun:pn_proactor_wait
>    fun:proactor_thread
> }
> {noformat}
> and under tsan with
> {noformat}
> 7: Test command: /nix/store/nlgrx0cl1l87nx0w660lb3jksn9jdca9-python3-3.7.6/bin/python "/home/jdanek/repos/qpid/qpid-proton/scripts/env.py" "--" "TSAN_OPTIONS=second_deadlock_stack=1 suppressions=/home/jdanek/repos/qpid/qpid-proton/tests/tsan.supp" "/home/jdanek/repos/qpid/qpid-proton/cmake-build-debugwithtsan/c/tests/c-threaderciser"
> 7: Test timeout computed to be: 1500
> 7: threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> 7: ==================
> 7: WARNING: ThreadSanitizer: heap-use-after-free (pid=10748)
> 7:   Atomic read of size 1 at 0x7b680000fc00 by thread T6:
> 7:     #0 pthread_mutex_lock <null> (libtsan.so.0+0x4284b)
> 7:     #1 lock /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:144 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:602 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous write of size 8 at 0x7b680000fc00 by thread T8:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1967 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Thread T6 (tid=10755, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7:   Thread T8 (tid=10757, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: heap-use-after-free (/nix/store/jy89v2q2zv074mvw91jgqcvkmk7yqx69-gcc-9.3.0-lib/lib/libtsan.so.0+0x4284b) in pthread_mutex_lock
> 7: ==================
> 7: ==================
> 7: WARNING: ThreadSanitizer: heap-use-after-free (pid=10748)
> 7:   Read of size 1 at 0x7b680000fc36 by thread T6 (mutexes: write M63):
> 7:     #0 wake /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:415 (libqpid-proton-proactor.so.1+0x5714)
> 7:     #1 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:603 (libqpid-proton-proactor.so.1+0x5714)
> 7:     #2 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #3 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #5 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous write of size 8 at 0x7b680000fc30 by thread T8:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1967 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M63 (0x7b680000fc00) created at:
> 7:     #0 pthread_mutex_lock <null> (libtsan.so.0+0x4284b)
> 7:     #1 lock /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:144 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:602 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Thread T6 (tid=10755, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7:   Thread T8 (tid=10757, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: heap-use-after-free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:415 in wake
> 7: ==================
> 7: ==================
> 7: WARNING: ThreadSanitizer: heap-use-after-free (pid=10748)
> 7:   Read of size 8 at 0x7b680000fc28 by thread T6 (mutexes: write M63):
> 7:     #0 wake /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:418 (libqpid-proton-proactor.so.1+0x5222)
> 7:     #1 wake /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:416 (libqpid-proton-proactor.so.1+0x5736)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:603 (libqpid-proton-proactor.so.1+0x5736)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous write of size 8 at 0x7b680000fc28 by thread T8:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1967 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M63 (0x7b680000fc00) created at:
> 7:     #0 pthread_mutex_lock <null> (libtsan.so.0+0x4284b)
> 7:     #1 lock /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:144 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:602 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Thread T6 (tid=10755, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7:   Thread T8 (tid=10757, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: heap-use-after-free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:418 in wake
> 7: ==================
> 7: ==================
> 7: WARNING: ThreadSanitizer: heap-use-after-free (pid=10748)
> 7:   Write of size 8 at 0x7b680000fc38 by thread T6 (mutexes: write M63, write M10):
> 7:     #0 wake /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:420 (libqpid-proton-proactor.so.1+0x5247)
> 7:     #1 wake /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:416 (libqpid-proton-proactor.so.1+0x5736)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:603 (libqpid-proton-proactor.so.1+0x5736)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous write of size 8 at 0x7b680000fc38 by thread T8:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1967 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M63 (0x7b680000fc00) created at:
> 7:     #0 pthread_mutex_lock <null> (libtsan.so.0+0x4284b)
> 7:     #1 lock /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:144 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:602 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M10 (0x7b5c000001c0) created at:
> 7:     #0 pthread_mutex_init <null> (libtsan.so.0+0x30d4d)
> 7:     #1 pmutex_init /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:137 (libqpid-proton-proactor.so.1+0x6a2b)
> 7:     #2 pn_proactor /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2103 (libqpid-proton-proactor.so.1+0x8302)
> 7:     #3 global_init /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:335 (c-threaderciser+0x4035c2)
> 7:     #4 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:564 (c-threaderciser+0x404708)
> 7: 
> 7:   Thread T6 (tid=10755, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7:   Thread T8 (tid=10757, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: heap-use-after-free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:420 in wake
> 7: ==================
> 7: ==================
> 7: WARNING: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or destroyed) (pid=10748)
> 7:     #0 pthread_mutex_unlock <null> (libtsan.so.0+0x4299a)
> 7:     #1 unlock /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:145 (libqpid-proton-proactor.so.1+0x5747)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:604 (libqpid-proton-proactor.so.1+0x5747)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M63 (0x7b680000fc00) created at:
> 7:     #0 pthread_mutex_lock <null> (libtsan.so.0+0x4284b)
> 7:     #1 lock /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:144 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #2 unassign_thread /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:602 (libqpid-proton-proactor.so.1+0x570a)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1979 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xbb04)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7: SUMMARY: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or destroyed) (/nix/store/jy89v2q2zv074mvw91jgqcvkmk7yqx69-gcc-9.3.0-lib/lib/libtsan.so.0+0x4299a) in __interceptor_pthread_mutex_unlock
> 7: ==================
> 7: ==================
> 7: WARNING: ThreadSanitizer: heap-use-after-free (pid=10748)
> 7:   Read of size 1 at 0x7b680000fc92 by thread T8 (mutexes: write M11):
> 7:     #0 post_event /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2477 (libqpid-proton-proactor.so.1+0xcf8c)
> 7:     #1 proactor_do_epoll /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2676 (libqpid-proton-proactor.so.1+0xcf8c)
> 7:     #2 pn_proactor_wait /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2803 (libqpid-proton-proactor.so.1+0xdef2)
> 7:     #3 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:473 (c-threaderciser+0x403f28)
> 7:     #4 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous write of size 8 at 0x7b680000fc90 by thread T8:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1967 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M11 (0x7b5c00000240) created at:
> 7:     #0 pthread_mutex_init <null> (libtsan.so.0+0x30d4d)
> 7:     #1 pmutex_init /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:137 (libqpid-proton-proactor.so.1+0x6a2b)
> 7:     #2 pn_proactor /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2104 (libqpid-proton-proactor.so.1+0x8316)
> 7:     #3 global_init /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:335 (c-threaderciser+0x4035c2)
> 7:     #4 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:564 (c-threaderciser+0x404708)
> 7: 
> 7:   Thread T8 (tid=10757, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: heap-use-after-free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2477 in post_event
> 7: ==================
> 7: ==================
> 7: WARNING: ThreadSanitizer: heap-use-after-free (pid=10748)
> 7:   Read of size 8 at 0x7b680000fc80 by thread T8 (mutexes: write M11):
> 7:     #0 post_event /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2477 (libqpid-proton-proactor.so.1+0xcfa4)
> 7:     #1 proactor_do_epoll /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2676 (libqpid-proton-proactor.so.1+0xcfa4)
> 7:     #2 pn_proactor_wait /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2803 (libqpid-proton-proactor.so.1+0xdef2)
> 7:     #3 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:473 (c-threaderciser+0x403f28)
> 7:     #4 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous write of size 8 at 0x7b680000fc80 by thread T8:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1967 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #4 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb8fd)
> 7:     #5 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #6 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Mutex M11 (0x7b5c00000240) created at:
> 7:     #0 pthread_mutex_init <null> (libtsan.so.0+0x30d4d)
> 7:     #1 pmutex_init /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:137 (libqpid-proton-proactor.so.1+0x6a2b)
> 7:     #2 pn_proactor /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2104 (libqpid-proton-proactor.so.1+0x8316)
> 7:     #3 global_init /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:335 (c-threaderciser+0x4035c2)
> 7:     #4 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:564 (c-threaderciser+0x404708)
> 7: 
> 7:   Thread T8 (tid=10757, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: heap-use-after-free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2477 in post_event
> 7: Test command: /nix/store/nlgrx0cl1l87nx0w660lb3jksn9jdca9-python3-3.7.6/bin/python "/home/jdanek/repos/qpid/qpid-proton/scripts/env.py" "--" "TSAN_OPTIONS=second_deadlock_stack=1 suppressions=/home/jdanek/repos/qpid/qpid-proton/tests/tsan.supp" "/home/jdanek/repos/qpid/qpid-proton/cmake-build-debugwithtsan/c/tests/c-threaderciser"
> 7: Test timeout computed to be: 1500
> 7: threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> 7: ==================
> 7: WARNING: ThreadSanitizer: data race (pid=10413)
> 7:   Write of size 8 at 0x7b6800000028 by thread T4:
> 7:     #0 free <null> (libtsan.so.0+0x2fa67)
> 7:     #1 listener_final_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1747 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #2 pn_listener_free /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1765 (libqpid-proton-proactor.so.1+0xafd0)
> 7:     #3 listener_process /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1895 (libqpid-proton-proactor.so.1+0xdb4c)
> 7:     #4 process /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2400 (libqpid-proton-proactor.so.1+0xdb4c)
> 7:     #5 proactor_do_epoll /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2581 (libqpid-proton-proactor.so.1+0xdb4c)
> 7:     #6 pn_proactor_wait /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2803 (libqpid-proton-proactor.so.1+0xdef2)
> 7:     #7 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:473 (c-threaderciser+0x403f28)
> 7:     #8 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Previous read of size 8 at 0x7b6800000028 by thread T2:
> 7:     #0 listener_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1982 (libqpid-proton-proactor.so.1+0xb506)
> 7:     #1 pn_proactor_done /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:2837 (libqpid-proton-proactor.so.1+0xb506)
> 7:     #2 proactor_thread /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:478 (c-threaderciser+0x403f9d)
> 7:     #3 <null> <null> (libtsan.so.0+0x2e0b6)
> 7: 
> 7:   Thread T4 (tid=10418, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7:   Thread T2 (tid=10416, running) created by main thread at:
> 7:     #0 pthread_create <null> (libtsan.so.0+0x3055b)
> 7:     #1 main /home/jdanek/repos/qpid/qpid-proton/c/tests/threaderciser.c:572 (c-threaderciser+0x4047d7)
> 7: 
> 7: SUMMARY: ThreadSanitizer: data race (/nix/store/jy89v2q2zv074mvw91jgqcvkmk7yqx69-gcc-9.3.0-lib/lib/libtsan.so.0+0x2fa67) in free
> 7: ==================
> {noformat}
> Other issues, mentioned in comments below, collected here
> Furthermore, I've seen it sometimes freeze on older clang (flaky on xenial https://travis-ci.com/github/jiridanek/qpid-proton/jobs/337482058#L2049, freezes reliably on xcode https://travis-ci.com/github/jiridanek/qpid-proton/jobs/337466798#L2165) and flaky leak on gcc xenial, https://travis-ci.com/github/jiridanek/qpid-proton/jobs/337466791#L1779:
> {noformat}
> 6: Test command: /opt/pyenv/shims/python "/home/travis/build/jiridanek/qpid-proton/scripts/env.py" "--" "TEST_EXE_PREFIX=/usr/bin/valgrind --tool=memcheck --leak-check=full --error-exitcode=42 --quiet --suppressions=/home/travis/build/jiridanek/qpid-proton/tests/valgrind.supp" "/usr/bin/valgrind" "--tool=memcheck" "--leak-check=full" "--error-exitcode=42" "--quiet" "--suppressions=/home/travis/build/jiridanek/qpid-proton/tests/valgrind.supp" "/home/travis/build/jiridanek/qpid-proton/build/c/tests/c-threaderciser"
> 6: Test timeout computed to be: 1500
> 6: threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> 6: ==11750== 64 bytes in 1 blocks are definitely lost in loss record 1 of 1
> 6: ==11750==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> 6: ==11750==    by 0x40217A: connection_ctx_new (threaderciser.c:211)
> 6: ==11750==    by 0x40217A: cpool_connect.part.3 (threaderciser.c:226)
> 6: ==11750==    by 0x402CC6: cpool_connect (threaderciser.c:225)
> 6: ==11750==    by 0x402CC6: handle (threaderciser.c:425)
> 6: ==11750==    by 0x402CC6: proactor_thread (threaderciser.c:476)
> 6: ==11750==    by 0x504E6B9: start_thread (pthread_create.c:333)
> 6: ==11750== 
>  6/46 Test  #6: c-threaderciser ..................***Failed   95.41 sec
> {noformat}
> Another flaky occurence, assertion fail on macOS with libuv, https://travis-ci.com/github/jiridanek/qpid-proton/jobs/337488524#L1931
> {noformat}
> 6: Test command: /usr/local/opt/python/libexec/bin/python "/Users/travis/build/jiridanek/qpid-proton/scripts/env.py" "--" "/Users/travis/build/jiridanek/qpid-proton/build/c/tests/c-threaderciser"
> 6: Test timeout computed to be: 1500
> 6: threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> 6: Assertion failed: (p->active > 0), function remove_active_lh, file /Users/travis/build/jiridanek/qpid-proton/c/src/proactor/libuv.c, line 392.
>  6/31 Test  #6: c-threaderciser ..................***Failed    0.18 sec
> {noformat}
> The threaderciser itself is not deterministic, and it is running for a fairly short time in the CI, so it is actually expected that the failures will be flaky.
> Another version of the leak trace from valgrind
> {noformat}
> threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> ==3008== 128 bytes in 2 blocks are definitely lost in loss record 1 of 1
> ==3008==    at 0x4C29F73: malloc (vg_replace_malloc.c:309)
> ==3008==    by 0x401F3A: connection_ctx_new (threaderciser.c:211)
> ==3008==    by 0x401F3A: cpool_connect.part.3 (threaderciser.c:226)
> ==3008==    by 0x402636: cpool_connect (threaderciser.c:367)
> ==3008==    by 0x402636: global_connect (threaderciser.c:367)
> ==3008==    by 0x402747: global_do_stuff (threaderciser.c:378)
> ==3008==    by 0x402B17: user_thread (threaderciser.c:397)
> ==3008==    by 0x504BEA4: start_thread (in /usr/lib64/libpthread-2.17.so)
> ==3008==    by 0x5E8C8DC: clone (in /usr/lib64/libc-2.17.so)
> ==3008== 
> {noformat}
> edit: another variant of the valgrind trace
> {noformat}
> threaderciser start: threads=8, time=1, actions=[listen, close-listen, connect, close-connect, wake, timeout, cancel-timeout]
> ==3100== 64 bytes in 1 blocks are definitely lost in loss record 1 of 1
> ==3100==    at 0x4C28A2E: malloc (vg_replace_malloc.c:270)
> ==3100==    by 0x4020B1: cpool_connect (threaderciser.c:211)
> ==3100==    by 0x4027E8: proactor_thread (threaderciser.c:425)
> ==3100==    by 0x5043AA0: start_thread (in /lib64/libpthread-2.12.so)
> ==3100==    by 0x5FF1C4C: clone (in /lib64/libc-2.12.so)
> ==3100== 
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org