uloop: rework event processing, fix use-after-free issues