]> git.pond.sub.org Git - empserver/commitdiff
(PS_KILL): Nobody can observe this state, as player is deleted right
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 21 Jan 2007 12:16:54 +0000 (12:16 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 21 Jan 2007 12:16:54 +0000 (12:16 +0000)
after entering it.  Remove.
(player_kill_idle, player_login): Simplify.

include/player.h
src/lib/player/login.c
src/server/idle.c

index bb10d269cd5f51da4810af0cc68163e01b82dc24..c5156e588e61106e1fca766503c1f3ac8ac5cc2a 100644 (file)
@@ -81,7 +81,6 @@ struct player {
 #define PS_LOGIN       1
 #define PS_PLAYING     2
 #define PS_SHUTDOWN    3
-#define PS_KILL                4
 
 /* player flags */
 enum {
index 9297cec44f608d0759856e643c8b65a3354d1519..bf30d7c6f45e50c85ff2e5caf9a607748d262737 100644 (file)
@@ -84,7 +84,8 @@ player_login(void *ud)
 
     pr_id(player, C_INIT, "Empire server ready\n");
 
-    while (!io_eof(player->iop) && !io_error(player->iop)) {
+    while (!io_eof(player->iop) && !io_error(player->iop)
+          && player->state != PS_SHUTDOWN) {
        io_output(player->iop, IO_WAIT);
        if (io_gets(player->iop, buf, sizeof(buf)) < 0) {
            io_input(player->iop, IO_WAIT);
@@ -107,8 +108,6 @@ player_login(void *ud)
        default:
            break;
        }
-       if (player->state >= PS_SHUTDOWN)
-           break;
     }
     player->state = PS_SHUTDOWN;
     if (!io_eof(player->iop)) {
index d80ddc53058003a2efe1a1e438390f71fc9f6b1b..d291b2655f4196695b1fcd6e97b7ca30bd173fcf 100644 (file)
@@ -55,9 +55,9 @@ player_kill_idle(void *unused)
        /*continue; */
        for (p = player_next(0); p != 0; p = player_next(p)) {
            if (p->state == PS_SHUTDOWN) {
-               /* no more mr. nice guy */
-               p->state = PS_KILL;
-               p->aborted++;
+               /* player thread hung */
+               /* FIXME but for how long?  unknown if shut down elsewhere! */
+               /* FIXME this can leave stale update_lock behind! */
                empth_terminate(p->proc);
                p = player_delete(p);
                continue;