From ef0dbf6790f8962be58c4b25fd48e33c69e38f0e Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Sat, 20 Aug 2005 19:16:56 +0000 Subject: [PATCH] (force): Change to create update thread instead of calling empth_sleep() as the empth_sleep() can not be aborted for an update. (update_force): New. --- include/server.h | 1 + src/lib/commands/forc.c | 14 +++++--------- src/server/update.c | 11 +++++++++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/include/server.h b/include/server.h index cbc258b2..5a797833 100644 --- a/include/server.h +++ b/include/server.h @@ -51,5 +51,6 @@ void player_kill_idle(void *); void update_main(void *); void update_sched(void *); void shutdown_sequence(void *); +void update_force(void *); #endif diff --git a/src/lib/commands/forc.c b/src/lib/commands/forc.c index f3cb1d90..9b5c678f 100644 --- a/src/lib/commands/forc.c +++ b/src/lib/commands/forc.c @@ -41,8 +41,7 @@ int force(void) { - int seconds; - time_t now; + static int seconds; if (update_pending) { pr("Update is pending\n"); @@ -59,12 +58,9 @@ force(void) seconds = onearg(player->argp[1], "Time until update [in seconds]? "); if (seconds < 0) return RET_FAIL; - if (seconds) { - time(&now); - pr("Waiting %d seconds...\n", seconds); - empth_sleep(now + seconds); - } - pr("Scheduling update now\n"); - empth_sem_signal(update_sem); + + pr("Scheduling update in %d second(s)\n", seconds); + empth_create(PP_SCHED, update_force, (50 * 1024), 0, "forceUpdate", + "Schedules an update", &seconds); return RET_OK; } diff --git a/src/server/update.c b/src/server/update.c index 4e4ba70a..015747f6 100644 --- a/src/server/update.c +++ b/src/server/update.c @@ -97,6 +97,17 @@ update_sched(void *unused) /*NOTREACHED*/ } +void +update_force(void *seconds) +{ + time_t now; + + time(&now); + empth_sleep(now + *(int *)seconds); + empth_sem_signal(update_sem); + empth_exit(); +} + /*ARGSUSED*/ static void update_wait(void *unused)