]> git.pond.sub.org Git - empserver/commitdiff
(shutdwn): Take exclusive update lock for shutdown. This makes the
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 21 Jan 2007 12:04:16 +0000 (12:04 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 21 Jan 2007 12:04:16 +0000 (12:04 +0000)
shutdown block until all aborted commands terminated and gave up their
lock.  Remove the cheesy one second wait for commands to finish.  This
also locks out further commands to execute during shutdown.  However,
it also makes it impossible to kill hung player threads here.  Rely on
player_kill_idle() for that.  That doesn't quite work right now,
because it leaves a stale shared lock behind, which blocks shutdown.

src/server/main.c

index 7d07e740d8e09d729a7eefb5b2b0581f4b2b31f9..ad527c4fd85dc40a8017d52ca31f9248950357ac 100644 (file)
@@ -366,7 +366,6 @@ void
 shutdwn(int sig)
 {
     struct player *p;
 shutdwn(int sig)
 {
     struct player *p;
-    time_t now;
 
     logerror("Shutdown commencing (cleaning up threads.)");
 
 
     logerror("Shutdown commencing (cleaning up threads.)");
 
@@ -381,16 +380,8 @@ shutdwn(int sig)
        }
        empth_wakeup(p->proc);
     }
        }
        empth_wakeup(p->proc);
     }
-
-    time(&now);
-    empth_sleep(now + 1);
-
-    for (p = player_next(0); p != 0; p = player_next(p)) {
-       p->state = PS_KILL;
-       p->aborted++;
-       empth_terminate(p->proc);
-       p = player_delete(p);
-    }
+    empth_rwlock_wrlock(update_lock);
+    /* rely on player_kill_idle() for killing hung player threads */
     if (sig)
        logerror("Server shutting down on signal %d", sig);
     else
     if (sig)
        logerror("Server shutting down on signal %d", sig);
     else