root/trunk/apache22/apr-util-hook-probes.patch

Revision 2, 3.6 kB (checked in by jesus, 8 months ago)

Apache DTrace crystal-meth... crazy dragons... crazy dragons indeed.

  • include/apr_hooks.h

    old new  
    2121/* For apr_array_header_t */ 
    2222#include "apr_tables.h" 
    2323 
     24#ifdef APR_DTRACE_PROVIDER 
     25#include <sys/sdt.h> 
     26#ifndef OLD_DTRACE_PROBE 
     27#define OLD_DTRACE_PROBE(name) __dtrace_ap___##name() 
     28#endif 
     29#ifndef OLD_DTRACE_PROBE1 
     30#define OLD_DTRACE_PROBE1(name,a) __dtrace_ap___##name(a) 
     31#endif 
     32#ifndef OLD_DTRACE_PROBE2 
     33#define OLD_DTRACE_PROBE2(name,a,b) __dtrace_ap___##name(a,b) 
     34#endif 
     35#else 
     36#define OLD_DTRACE_PROBE(a) 
     37#define OLD_DTRACE_PROBE1(a,b) 
     38#define OLD_DTRACE_PROBE2(a,b,c) 
     39#endif 
     40 
    2441/** 
    2542 * @file apr_hooks.h 
    2643 * @brief Apache hook functions 
     
    107124    ns##_LINK_##name##_t *pHook; \ 
    108125    int n; \ 
    109126\ 
    110     if(!_hooks.link_##name) \ 
    111         return; \ 
     127    OLD_DTRACE_PROBE(name##__entry); \ 
    112128\ 
    113     pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ 
    114     for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ 
    115         pHook[n].pFunc args_use; \ 
     129    if(_hooks.link_##name) \ 
     130        { \ 
     131        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ 
     132        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ 
     133            { \ 
     134            OLD_DTRACE_PROBE1(name##__dispatch__invoke, (char *)pHook[n].szName); \ 
     135            pHook[n].pFunc args_use; \ 
     136            OLD_DTRACE_PROBE2(name##__dispatch__complete, (char *)pHook[n].szName, 0); \ 
     137            } \ 
     138        } \ 
     139
     140    OLD_DTRACE_PROBE1(name##__return, 0); \ 
     141
    116142    } 
    117143 
    118144/* FIXME: note that this returns ok when nothing is run. I suspect it should 
     
    139165    { \ 
    140166    ns##_LINK_##name##_t *pHook; \ 
    141167    int n; \ 
    142     ret rv; \ 
     168    ret rv = ok; \ 
    143169\ 
    144     if(!_hooks.link_##name) \ 
    145         return ok; \ 
     170    OLD_DTRACE_PROBE(name##__entry); \ 
    146171\ 
    147     pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ 
    148     for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ 
    149         { \ 
    150         rv=pHook[n].pFunc args_use; \ 
     172    if(_hooks.link_##name) \ 
     173        { \ 
     174        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ 
     175        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ 
     176            { \ 
     177            OLD_DTRACE_PROBE1(name##__dispatch__invoke, (char *)pHook[n].szName); \ 
     178            rv=pHook[n].pFunc args_use; \ 
     179            OLD_DTRACE_PROBE2(name##__dispatch__complete, (char *)pHook[n].szName, rv); \ 
     180            if(rv != ok && rv != decline) \ 
     181                break; \ 
     182            rv = ok; \ 
     183            } \ 
     184        } \ 
    151185\ 
    152         if(rv != ok && rv != decline) \ 
    153             return rv; \ 
    154         } \ 
    155     return ok; \ 
     186    OLD_DTRACE_PROBE1(name##__return, rv); \ 
     187
     188    return rv; \ 
    156189    } 
    157190 
    158191 
     
    176209    { \ 
    177210    ns##_LINK_##name##_t *pHook; \ 
    178211    int n; \ 
    179     ret rv; \ 
     212    ret rv = decline; \ 
    180213\ 
    181     if(!_hooks.link_##name) \ 
    182         return decline; \ 
     214    OLD_DTRACE_PROBE(name##__entry); \ 
    183215\ 
    184     pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ 
    185     for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ 
    186         { \ 
    187         rv=pHook[n].pFunc args_use; \ 
     216    if(_hooks.link_##name) \ 
     217        { \ 
     218        pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ 
     219        for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ 
     220            { \ 
     221            OLD_DTRACE_PROBE1(name##__dispatch__invoke, (char *)pHook[n].szName); \ 
     222            rv=pHook[n].pFunc args_use; \ 
     223            OLD_DTRACE_PROBE2(name##__dispatch__complete, (char *)pHook[n].szName, rv); \ 
    188224\ 
    189         if(rv != decline) \ 
    190             return rv; \ 
    191         } \ 
    192     return decline; \ 
     225            if(rv != decline) \ 
     226                break; \ 
     227            } \ 
     228        } \ 
     229
     230    OLD_DTRACE_PROBE1(name##__return, rv); \ 
     231
     232    return rv; \ 
    193233    } 
    194234 
    195235    /* Hook orderings */ 
Note: See TracBrowser for help on using the browser.