--- ./lib/callable/src/perl/Main.cc.orig 2014-10-13 06:14:22.000000000 -0600 +++ ./lib/callable/src/perl/Main.cc 2015-01-19 12:30:00.000000000 -0700 @@ -37,6 +37,7 @@ namespace { const char globalScope[]="Polymake::Scope"; +static bool need_cleanup; GV *globalScope_gv=NULL; void destroy_perl(pTHXx) @@ -54,13 +55,14 @@ PerlInterpreter *static_perl = NULL; void emergency_cleanup() __attribute__((destructor)); void emergency_cleanup() { - if (PL_curinterp) { + if (PL_curinterp && need_cleanup) { #ifdef PERL_IMPLICIT_CONTEXT dTHX; destroy_perl(aTHX); #else destroy_perl(static_perl); #endif + need_cleanup = false; } } @@ -158,6 +160,7 @@ Main::Main(const std::string& user_opts, pTHXx = perl_alloc(); PL_perl_destruct_level = 1; perl_construct(aTHXx); + need_cleanup = true; PL_exit_flags |= PERL_EXIT_DESTRUCT_END; if (perl_parse(aTHXx, xs_init, argc, (char**)argv, *env)) { destroy_perl(aTHXx);