Do not free epoll event queues
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Oct 2015 16:09:46 +0000 (12:09 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 14 Oct 2015 22:43:53 +0000 (18:43 -0400)
As with many race conditions, something that can happen ends up being
quite likely.  With a little parallelism, I'm able to trigger bugs where
an outstanding INDIR pointing to an epoll event queue gets handled after
the ev_q gets cleaned up.

The long term solution is some form of user-deferred cleanup.  For now,
we can throw away a little RAM.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/iplib/epoll.c

index 764652a..f239400 100644 (file)
@@ -158,15 +158,19 @@ static struct event_queue *ep_get_alarm_evq(void)
  * some sort of user deferred destruction. (TODO). */
 static void ep_put_ceq_evq(struct event_queue *ceq_evq)
 {
+#if 0 /* TODO: EVQ/INDIR Cleanup */
        ceq_cleanup(&ceq_evq->ev_mbox->ceq);
        evq_remove_wakeup_ctlr(ceq_evq);
        put_eventq_raw(ceq_evq);
+#endif
 }
 
 static void ep_put_alarm_evq(struct event_queue *alarm_evq)
 {
+#if 0 /* TODO: EVQ/INDIR Cleanup */
        evq_remove_wakeup_ctlr(alarm_evq);
        put_eventq(alarm_evq);
+#endif
 }
 
 static void epoll_close(struct user_fd *ufd)