INDIR event handler registered dynamically
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Jun 2014 01:23:02 +0000 (18:23 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Jun 2014 01:52:20 +0000 (18:52 -0700)
All processes need this registered.  This one used to be done
statically, but that'll be a little painful when we use registration
functions.

So long as this is done before any INDIR events are sent, we're fine.
(This is the case here).

user/parlib/event.c
user/parlib/uthread.c

index aaf7595..52e3ad0 100644 (file)
@@ -166,8 +166,7 @@ unsigned int get_event_type(struct event_mbox *ev_mbox)
 
 /* List of handlers, process-wide, that the 2LS should fill in.  They all must
  * return (don't context switch to a u_thread) */
-handle_event_t ev_handlers[MAX_NR_EVENT] = {[EV_EVENT] handle_ev_ev,
-                                            0};
+handle_event_t ev_handlers[MAX_NR_EVENT];
 
 /* Attempts to handle a message.  Returns 1 if we dequeued a msg, 0 o/w. */
 int handle_one_mbox_msg(struct event_mbox *ev_mbox)
index 9ff0cef..cb2cf23 100644 (file)
@@ -73,6 +73,7 @@ void uthread_lib_init(struct uthread *uthread)
        init_once_racy(return);
        vcore_init();
        uthread_manage_thread0(uthread);
+       ev_handlers[EV_EVENT] = handle_ev_ev;
        /* Receive preemption events.  Note that this merely tells the kernel how to
         * send the messages, and does not necessarily provide storage space for the
         * messages.  What we're doing is saying that all PREEMPT and CHECK_MSGS