- int *level;
-CODE:
- {
- level = PerlMemShared_malloc(sizeof *level);
- *level = 1;
- LEAVE;
- SAVEDESTRUCTOR_X(tc_callback, level);
- ENTER;
+ GV *gv;
+PPCODE:
+ gv = gv_fetchpv(__PACKAGE__ "::_CLEANUP", 0, SVt_PVCV);
+ if (gv) {
+ CV *cv = GvCV(gv);
+ if (!PL_endav)
+ PL_endav = newAV();
+ av_unshift(PL_endav, 1);
+ SvREFCNT_inc(cv);
+ if (!av_store(PL_endav, 0, (SV *) cv))
+ SvREFCNT_dec(cv);
+ sv_magicext((SV *) PL_endav, NULL, PERL_MAGIC_ext, &tc_endav_vtbl, NULL, 0);