Can someone please explain the logic behind this?
I think I understand, but I'd like to know what people are trying
to achieve.



Adrian

On Sat, Feb 23, 2008, chtsanti wrote:
> Update of cvs.devel.squid-cache.org:/cvsroot/squid/squid3/src
> 
> Modified Files:
>       Tag: async-calls
>       debug.cc Debug.h main.cc structs.h cf.data.pre 
> Log Message:
> - Add TheAssertsPerStep counter to count the number of assertions per
> single main loop iteration. This counter is reset to zero at the
> beginning of every main loop iteration.
> 
> - To reset the TheAssertsPerStep counter a new AsyncEngine based class used,
> the XAssertsEngine.
> 
> - Add "assert_burst_max <int>" to squid.conf. If TheAssertsPerStep
> counter exceeds a non-negative assert_burst_max, we abort().
> If set to zero, the first assertion aborts Squid, giving users the old
> behavior. If set to a negative number, there is no limit.
> 
> 
> 
> Index: cf.data.pre
> ===================================================================
> RCS file: /cvsroot/squid/squid3/src/cf.data.pre,v
> retrieving revision 1.155.4.3
> retrieving revision 1.155.4.4
> diff -C2 -d -r1.155.4.3 -r1.155.4.4
> *** cf.data.pre       12 Feb 2008 19:04:39 -0000      1.155.4.3
> --- cf.data.pre       23 Feb 2008 10:31:18 -0000      1.155.4.4
> ***************
> *** 5610,5612 ****
> --- 5610,5628 ----
>   DOC_END
>   
> + NAME: assert_burst_max
> + TYPE: int
> + LOC: Config.assert_burst_max
> + DEFAULT: 100
> + DOC_START
> +     When this is set to a possitive number then Squid will abort 
> +     if an assertions burst exceeds this number. 
> +     If set to zero, the first assertion aborts Squid, giving users
> +     the old behavior. If set to a negative number, there is no 
> +     limit.
> +     An asssertions burst defined as the number of assertions per 
> +     single Squid main loop iteration.
> +     WARNING! This is an experimental feature and the definition 
> +     of a "burst" can change
> + DOC_END
> + 
>   EOF
> 
> Index: main.cc
> ===================================================================
> RCS file: /cvsroot/squid/squid3/src/main.cc,v
> retrieving revision 1.89.4.7
> retrieving revision 1.89.4.8
> diff -C2 -d -r1.89.4.7 -r1.89.4.8
> *** main.cc   12 Feb 2008 19:05:00 -0000      1.89.4.7
> --- main.cc   23 Feb 2008 10:31:18 -0000      1.89.4.8
> ***************
> *** 144,147 ****
> --- 144,158 ----
>   };
>   
> + class XAssertsEngine : public AsyncEngine
> + {
> + 
> + public:
> +     int checkEvents(int timeout)
> +     {
> +     TheAssertsPerStep = 0;
> +         return EVENT_IDLE;
> +     };
> + };
> + 
>   class SignalEngine: public AsyncEngine
>   {
> ***************
> *** 1297,1300 ****
> --- 1308,1314 ----
>       mainLoop.registerEngine(&signalEngine);
>   
> +     XAssertsEngine xassertsEngine;
> +     mainLoop.registerEngine(&xassertsEngine);
> + 
>       /* TODO: stop requiring the singleton here */
>       mainLoop.registerEngine(EventScheduler::GetInstance());
> 
> Index: debug.cc
> ===================================================================
> RCS file: /cvsroot/squid/squid3/src/debug.cc,v
> retrieving revision 1.18.4.4
> retrieving revision 1.18.4.5
> diff -C2 -d -r1.18.4.4 -r1.18.4.5
> *** debug.cc  16 Feb 2008 21:06:42 -0000      1.18.4.4
> --- debug.cc  23 Feb 2008 10:31:18 -0000      1.18.4.5
> ***************
> *** 45,48 ****
> --- 45,49 ----
>   int TheCascadingAsserts = 0;
>   int TheSalvagedAsserts = 0;
> + int TheAssertsPerStep = 0;
>   
>   static char *debug_log_file = NULL;
> ***************
> *** 591,606 ****
>   xassert(const char *msg, const char *file, int line) {
>   
> !     if (TheCascadingAsserts < MAX_CASCADING_ASSERTS && 
> AsyncCall_Handling_Exceptions) {
>       TheCascadingAsserts++;
>       TheSalvagedAsserts++;
> !     debugs(0, 0, "assertion failed: " << file << ":" << line << ": \"" << 
> msg << "\". Trying to survive. Salvaged assertions: " << TheSalvagedAsserts);
>   
>       throw TextException(msg, file, line);
>       }
>       
> -     debugs(0, 0, "assertion failed: " << file << ":" << line << ": \"" << 
> msg << "\"");
>   
>       if(TheCascadingAsserts >= MAX_CASCADING_ASSERTS)
> !     debugs(0, 0, "I am dying after " << TheCascadingAsserts << "cascading 
> assertions!" );
>   
>       if (!shutting_down)
> --- 592,619 ----
>   xassert(const char *msg, const char *file, int line) {
>   
> !     debugs(0, 0, "assertion failed: " << file << ":" << line << ": \"" << 
> msg << "\"");    
> ! 
> !     if (AsyncCall_Handling_Exceptions &&
> !     TheCascadingAsserts < MAX_CASCADING_ASSERTS && 
> !     ( Config.assert_burst_max < 0 ||
> !       (Config.assert_burst_max > 0 && TheAssertsPerStep < 
> Config.assert_burst_max)
> !         )
> !     ) {
>       TheCascadingAsserts++;
>       TheSalvagedAsserts++;
> !     TheAssertsPerStep++;
> ! 
> !     debugs(0, 0, "salvaging assertion #" << TheSalvagedAsserts << " (" <<
> !            TheAssertsPerStep << "/" << Config.assert_burst_max << ")");
>   
>       throw TextException(msg, file, line);
>       }
>       
>   
>       if(TheCascadingAsserts >= MAX_CASCADING_ASSERTS)
> !     debugs(0, 0, "dying after " << TheCascadingAsserts << "cascading 
> assertions" );
> !     
> !     if(Config.assert_burst_max > 0 && TheAssertsPerStep >= 
> Config.assert_burst_max)
> !     debugs(0, 0, "dying after an " << TheAssertsPerStep << " assertions 
> burst" );
>   
>       if (!shutting_down)
> 
> Index: Debug.h
> ===================================================================
> RCS file: /cvsroot/squid/squid3/src/Debug.h,v
> retrieving revision 1.10.4.3
> retrieving revision 1.10.4.4
> diff -C2 -d -r1.10.4.3 -r1.10.4.4
> *** Debug.h   14 Feb 2008 21:46:38 -0000      1.10.4.3
> --- Debug.h   23 Feb 2008 10:31:18 -0000      1.10.4.4
> ***************
> *** 55,58 ****
> --- 55,60 ----
>   void WillCatchException(int debug_section, int debug_level, const char 
> *who);
>   void WontCatchException();
> + extern int TheSalvagedAsserts;
> + extern int TheAssertsPerStep;
>   
>   /* defined names for Debug Levels */
> 
> Index: structs.h
> ===================================================================
> RCS file: /cvsroot/squid/squid3/src/structs.h,v
> retrieving revision 1.116.4.3
> retrieving revision 1.116.4.4
> diff -C2 -d -r1.116.4.3 -r1.116.4.4
> *** structs.h 12 Feb 2008 19:05:14 -0000      1.116.4.3
> --- structs.h 23 Feb 2008 10:31:18 -0000      1.116.4.4
> ***************
> *** 693,696 ****
> --- 693,697 ----
>   
>       char *accept_filter;
> +     int assert_burst_max;
>   };
>   

Reply via email to