svoid runInQAndWait(Q q, final Runnable r) { if (r == null) ret; if (isInQ(q)) ret with callF(r); final new Flag done; final new Var error; q.add(r { try { callF(r); } catch e { var.set(e); } finally { done.raise(); } }); flag.waitUntilUp(); if (error.has()) throw rethrow(error!); }