[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