Segfault upon exit when rxvt-unicode 9.22 is compiled against Perl 5.32

Marc Lehmann schmorp at
Tue Jun 30 09:26:17 CEST 2020

Hi, and thanks for your report!

On Mon, Jun 29, 2020 at 07:40:41PM -0500, Rob Hoelz <rob at> wrote:
> 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
> exists.

Hmm, I think the altogether better solution is to simply get rid of
~rxvt_perl_interp. Does something like this also work for you?

   rxvt_perl_interp::~rxvt_perl_interp ()

i.e. simply remove all code from ~rxvt_perl_interp.

That's basically what I aim for in the next release.

                The choice of a       Deliantra, the free code+content MORPG
      -----==-     _GNU_    
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      schmorp at
      -=====/_/_//_/\_,_/ /_/\_\

More information about the rxvt-unicode mailing list