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;