From 6fed6432dfcacafebe5d963557a94e5c4c277e21 Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Tue, 20 Nov 2007 08:45:22 +0100 Subject: [PATCH] perl plugin: Execute END blocks in main thread only. Each END block is executed during perl_destruct() which happens once for each ithread. As the number of ithreads are in no way related to any Perl plugins this is not what we want. Now, each END block is only executed when the main threads terminates (which happens after any other Perl thread has been shut down). Signed-off-by: Sebastian Harl Signed-off-by: Florian Forster --- src/perl.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/perl.c b/src/perl.c index cced76bb..d6371dba 100644 --- a/src/perl.c +++ b/src/perl.c @@ -779,6 +779,7 @@ static XS (Collectd_call_by_name) static c_ithread_t *c_ithread_create (PerlInterpreter *base) { c_ithread_t *t = NULL; + dTHXa (NULL); assert (NULL != perl_threads); @@ -789,6 +790,14 @@ static c_ithread_t *c_ithread_create (PerlInterpreter *base) ? NULL : perl_clone (base, CLONEf_KEEP_PTR_TABLE); + aTHX = t->interp; + + if (NULL != base) { + av_clear (PL_endav); + av_undef (PL_endav); + PL_endav = Nullav; + } + #if COLLECT_DEBUG ++perl_threads->number_of_threads; #endif /* COLLECT_DEBUG */ -- 2.11.0