]> git.pond.sub.org Git - empserver/commitdiff
(force): Change to create update thread instead of calling
authorRon Koenderink <rkoenderink@yahoo.ca>
Sat, 20 Aug 2005 19:16:56 +0000 (19:16 +0000)
committerRon Koenderink <rkoenderink@yahoo.ca>
Sat, 20 Aug 2005 19:16:56 +0000 (19:16 +0000)
empth_sleep() as the empth_sleep() can not be aborted for an update.
(update_force): New.

include/server.h
src/lib/commands/forc.c
src/server/update.c

index cbc258b20c0c4ee0c2779ca4df93052363e63be4..5a79783384bf6afa33ad1f550a5f94ea65837752 100644 (file)
@@ -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
index f3cb1d9087c26fd838ea7a1807fbb95341b69716..9b5c678fdb800b9809d4ff32b198a69d9cc79a88 100644 (file)
@@ -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;
 }
index 4e4ba70a9059884d41600d1a7082c54879ba3dbd..015747f6d763acdca223dcfdd2bf8cf7662a7118 100644 (file)
@@ -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)