cvsuser     04/02/09 02:12:56

  Modified:    src      events.c
  Log:
  event-handling-25
  * better debugging: event names
  * comment fixes
  
  Revision  Changes    Path
  1.32      +29 -13    parrot/src/events.c
  
  Index: events.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/events.c,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -w -r1.31 -r1.32
  --- events.c  8 Feb 2004 19:46:55 -0000       1.31
  +++ events.c  9 Feb 2004 10:12:56 -0000       1.32
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: events.c,v 1.31 2004/02/08 19:46:55 leo Exp $
  +$Id: events.c,v 1.32 2004/02/09 10:12:56 leo Exp $
   
   =head1 NAME
   
  @@ -23,7 +23,7 @@
   #include <assert.h>
   
   /*
  - * event debugging stuff - turn it off befreo running tests
  + * event debugging stuff - turn it off before running tests
    */
   #define EVENT_DEBUG 0
   /*
  @@ -37,6 +37,26 @@
   
   #if EVENT_DEBUG
   #  define edebug(x) fprintf x
  +static const char *ev_names[] = {
  +    "EVENT_TYPE_NONE",
  +    "EVENT_TYPE_EVENT",
  +    "EVENT_TYPE_IO",
  +    "EVENT_TYPE_MSG",
  +    "EVENT_TYPE_ASYNC_IO",
  +    "EVENT_TYPE_TIMER",
  +    "EVENT_TYPE_CALL_BACK",
  +    "EVENT_TYPE_SLEEP",
  +    "EVENT_TYPE_TERMINATE",
  +    "EVENT_TYPE_EVENT_TERMINATE",
  +    "EVENT_TYPE_CLASS_CHANGED",
  +    "EVENT_TYPE_SIGNAL"
  +};
  +static const char*
  +et(parrot_event* e)
  +{
  +    return ev_names[e->type];
  +}
  +
   #else
   #  define edebug(x)
   #endif
  @@ -476,7 +496,7 @@
       /*
        * sleep checks events when it awakes
        */
  -    edebug((stderr, "got entry - schedule_inter_qentry %d\n", event->type));
  +    edebug((stderr, "got entry - schedule_inter_qentry %s\n", et(event)));
       if (event->type != EVENT_TYPE_SLEEP)
           enable_event_checking(interpreter);
       /*
  @@ -915,7 +935,7 @@
        * event handler likes callbacks or timers are run as normal code
        * so inside such an even handler function another event might get
        * handled, which is good (higher priority events can interrupt
  -     * other event handler OTOH we must ensure that all state changes
  +     * other event handler) OTOH we must ensure that all state changes
        * are done in do_event and we should probably suspend nested
        * event handlers sometimes
        *
  @@ -929,9 +949,10 @@
           entry = wait_for_entry(tq);
           event = (parrot_event* )entry->data;
           mem_sys_free(entry);
  -        edebug((stderr, "got ev %d head : %p\n", event->type, tq->head));
  +        edebug((stderr, "got ev %s head : %p\n", et(event), tq->head));
           next = do_event(interpreter, event, next);
       }
  +    edebug((stderr, "woke up\n"));
       return next;
   }
   
  @@ -951,6 +972,8 @@
   {
   #if PARROT_HAS_THREADS
   
  +    if (interpreter->sleeping)
  +        fprintf(stderr, "nested sleep might not work\n");
       /*
        * place the opcode_t* next arg in the event data, so that
        * we can identify this event in wakeup
  @@ -1036,7 +1059,7 @@
   static void*
   do_event(Parrot_Interp interpreter, parrot_event* event, void *next)
   {
  -    edebug((stderr, "do_event %d\n", event->type));
  +    edebug((stderr, "do_event %s\n", et(event)));
       switch (event->type) {
           case EVENT_TYPE_TERMINATE:
               next = NULL;        /* this will terminate the run loop */
  @@ -1061,13 +1084,6 @@
               break;
           case EVENT_TYPE_SLEEP:
               interpreter->sleeping = 0;
  -#if 0
  -            /* doesn't work do_event is called from outside too */
  -            if (!next || event->data 1= next)
  -                internal_exception(1,
  -                        "Unhandled nested sleep call: next = %p ed = %p",
  -                        next, event->data);
  -#endif
               break;
           default:
               fprintf(stderr, "Unhandled event type %d\n", event->type);
  
  
  

Reply via email to