From aaaf5bdc8219a7b292a2cf6d3154d08cc885793d Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 21 Jan 2007 12:16:54 +0000 Subject: [PATCH] (PS_KILL): Nobody can observe this state, as player is deleted right after entering it. Remove. (player_kill_idle, player_login): Simplify. --- include/player.h | 1 - src/lib/player/login.c | 5 ++--- src/server/idle.c | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/include/player.h b/include/player.h index bb10d269..c5156e58 100644 --- a/include/player.h +++ b/include/player.h @@ -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 { diff --git a/src/lib/player/login.c b/src/lib/player/login.c index 9297cec4..bf30d7c6 100644 --- a/src/lib/player/login.c +++ b/src/lib/player/login.c @@ -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)) { diff --git a/src/server/idle.c b/src/server/idle.c index d80ddc53..d291b265 100644 --- a/src/server/idle.c +++ b/src/server/idle.c @@ -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;