From d4150cc2ee2647fd540605526ff20071caca3360 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 20 Jul 2007 18:12:03 +0000 Subject: [PATCH] LWP failed to wake up threads sleeping in empth_sleep() while other threads were runnable. This let players with a sufficiently fast connection starve out system threads, including the update. Fix: [EMPTH_LWP] (lwpWakeupSleep): External linkage. [EMPTH_LWP] (lwpReschedule): Call it. --- src/lib/lwp/lwp.c | 1 + src/lib/lwp/lwpint.h | 1 + src/lib/lwp/sel.c | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/lwp/lwp.c b/src/lib/lwp/lwp.c index a3bb2423..d5602b1b 100644 --- a/src/lib/lwp/lwp.c +++ b/src/lib/lwp/lwp.c @@ -76,6 +76,7 @@ lwpReschedule(void) } lwpSigWakeup(); + lwpWakeupSleep(); /* destroy dead threads */ lwpStatus(LwpCurrent, "Cleaning dead queue"); diff --git a/src/lib/lwp/lwpint.h b/src/lib/lwp/lwpint.h index 8795d0d2..4f6350c6 100644 --- a/src/lib/lwp/lwpint.h +++ b/src/lib/lwp/lwpint.h @@ -89,6 +89,7 @@ void lwpReady(struct lwpProc *); void lwpReschedule(void); void lwpEntryPoint(void); void lwpInitSelect(struct lwpProc *); +void lwpWakeupSleep(void); void lwpSelect(void *); void lwpInitSigWait(sigset_t *); void lwpSigWakeup(void); diff --git a/src/lib/lwp/sel.c b/src/lib/lwp/sel.c index cb360eed..ea187982 100644 --- a/src/lib/lwp/sel.c +++ b/src/lib/lwp/sel.c @@ -123,7 +123,7 @@ lwpWakeupFd(struct lwpProc *proc) lwpReady(proc); } -static void +void lwpWakeupSleep(void) { time_t now;