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