I just upgraded my system (Arch Linux) to Perl 5.32, and I noticed that urxvt 
started dropping core files upon exit.  I dug into this, and it seems
that unlike Perl 5.30 or previous versions, Perl 5.32 unconditionally calls 
getenv("PERL_DESTRUCT_LEVEL") in perl_destruct, which is called at
atexit handler time.  Because rxvt_term makes a copy of the original process 
environment which it assigns to environ, and then it frees that copy
in its destructor when ev_run is wrapping up, this results in a use-after-free 
when perl_destruct is called, and occasionally a segfault.

I patched my local rxvt-unicode package with a workaround - it just sets 
environ = rxvt_environ after ev_run returns, but maybe a better approach

-Rob Hoelz

rxvt-unicode mailing list

Reply via email to