[Jifty-commit] r5427 - Runops-Hook/trunk
Jifty commits
jifty-commit at lists.jifty.org
Sat May 10 08:29:08 EDT 2008
Author: nothingmuch
Date: Sat May 10 08:29:06 2008
New Revision: 5427
Modified:
Runops-Hook/trunk/Hook.xs
Log:
more Trace.xs goodness
Modified: Runops-Hook/trunk/Hook.xs
==============================================================================
--- Runops-Hook/trunk/Hook.xs (original)
+++ Runops-Hook/trunk/Hook.xs Sat May 10 08:29:06 2008
@@ -6,7 +6,7 @@
#define XPUSHREF(x) XPUSHs(sv_2mortal(newRV_inc(x)))
-int (*old_runops ) ( pTHX );
+int (*Runops_Hook_old_runops ) ( pTHX );
bool (*Runops_Hook_hook)(pTHX);
@@ -182,7 +182,7 @@
Runops_Hook_disable();
/* make the environment as normal as possible for callbacks */
- PL_runops = old_runops;
+ PL_runops = Runops_Hook_old_runops;
ENTER;
SAVETMPS;
@@ -287,9 +287,8 @@
void
Runops_Hook_clear_perl_hook(pTHX) {
- if (Runops_Hook_perl_hook) {
- SvREFCNT_dec(Runops_Hook_perl_hook);
- Runops_Hook_perl_hook = NULL;
+ if ( Runops_Hook_perl_hook != (SV*)NULL ) {
+ SvSetSV(Runops_Hook_perl_hook, &PL_sv_undef );
}
}
@@ -303,13 +302,23 @@
}
void
-Runops_Hook_set_perl_hook (pTHX_ SV *hook) {
+Runops_Hook_set_perl_hook (pTHX_ SV *tracer_rv) {
+ /* Validate tracer_rv */
+ if ( ! SvROK( tracer_rv ) || ! SVt_PVCV == SvTYPE( SvRV( tracer_rv ) ) ) {
+ croak( aTHX_ "the hook must be a code reference" );
+ }
+
Runops_Hook_clear_perl_hook(aTHX);
Runops_Hook_load_B(aTHX);
- Runops_Hook_perl_hook = hook;
- SvREFCNT_inc(Runops_Hook_perl_hook);
+ /* Initialize/set the tracing function */
+ if ( Runops_Hook_perl_hook == (SV*)NULL ) {
+ Runops_Hook_perl_hook = newSVsv( tracer_rv );
+ }
+ else {
+ SvSetSV( Runops_Hook_perl_hook, tracer_rv );
+ }
Runops_Hook_set_hook(Runops_Hook_perl);
}
@@ -331,7 +340,7 @@
BOOT:
Runops_Hook_clear_hook();
- old_runops = PL_runops;
+ Runops_Hook_old_runops = PL_runops;
PL_runops = runops_trace;
HV *
More information about the Jifty-commit
mailing list