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

[jira] [Updated] (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:all-tabpanel ]

Jiri Daněk updated PROTON-2225:
-------------------------------
    Description: 
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}

  was:
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}


> 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