From: Sebastian Harl Date: Tue, 20 Nov 2007 07:45:22 +0000 (+0100) Subject: perl plugin: Execute END blocks in main thread only. X-Git-Tag: collectd-4.3.0beta0~88 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=6fed6432dfcacafebe5d963557a94e5c4c277e21;p=collectd.git 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 --- 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 */