Subject: | Segmentation fault in weak_set call during global destruction |
As discussed in IRC - since this commit:
https://github.com/Leont/linux-epoll/commit/244a90de900779e1952c7d3cf2f23e269f2ef598
I see periodic segfaults in global destruction, example stacktrace:
#0 0x00000000004b4dcc in Perl_av_delete ()
#1 0x00007ffff4504fc1 in weak_set () from .../5.26.1/x86_64-linux/auto/Linux/Epoll/Epoll.so
#2 0x000000000049f4ab in Perl_mg_set ()
#3 0x00000000004d4074 in Perl_sv_kill_backrefs ()
#4 0x00000000004a2d5d in Perl_magic_killbackrefs ()
#5 0x00000000004c2914 in S_sv_unmagicext_flags.part.10 ()
#6 0x00000000004c2a5d in Perl_sv_unmagic ()
#7 0x00000000004c1b78 in Perl_sv_clear ()
#8 0x00000000004c2422 in Perl_sv_free2 ()
#9 0x0000000000470815 in Perl_cv_undef_flags ()
#10 0x00000000004c1ba8 in Perl_sv_clear ()
#11 0x00000000004c2422 in Perl_sv_free2 ()
#12 0x000000000049f025 in S_mg_free_struct ()
#13 0x000000000049f9d3 in Perl_mg_free ()
#14 0x00000000004c1b80 in Perl_sv_clear ()
#15 0x00000000004c2422 in Perl_sv_free2 ()
#16 0x000000000049f025 in S_mg_free_struct ()
#17 0x000000000049f9d3 in Perl_mg_free ()
#18 0x00000000004c1b80 in Perl_sv_clear ()
#19 0x00000000004c2422 in Perl_sv_free2 ()
#20 0x00000000004c06d7 in S_visit ()
#21 0x00000000004c277c in Perl_sv_clean_objs ()
#22 0x00000000004400bf in perl_destruct ()
#23 0x000000000041ff54 in main ()
The rest of the commits in 0.014 are fine - after reverting just that one change, everything is stable again.
Will try to put together a test case - my current code is IO::Async-based and doesn't trigger the failure reliably enough.
thanks,
Tom