]> git.pond.sub.org Git - empserver/blobdiff - src/lib/player/login.c
Fix server shutdown to let player output drain properly
[empserver] / src / lib / player / login.c
index d6a2b5424c99dc9e360499ac883aaa90f18f2b21..1f5400c9e4c9720439971f58856dfae58a34e2a9 100644 (file)
@@ -86,7 +86,7 @@ player_login(void *ud)
 
     pr_id(player, C_INIT, "Empire server ready\n");
 
-    while (player->state != PS_SHUTDOWN) {
+    for (;;) {
        io_output(player->iop, 1);
        if (io_gets(player->iop, buf, sizeof(buf)) < 0) {
            res = io_input(player->iop, 1);
@@ -122,7 +122,6 @@ player_login(void *ud)
     }
     player->state = PS_SHUTDOWN;
     pr_id(player, C_EXIT, "so long...\n");
-    while (io_output(player->iop, 1) > 0) ;
     player_delete(player);
     empth_exit();
     /*NOTREACHED*/
@@ -355,9 +354,11 @@ play_cmd(void)
     empth_set_name(empth_self(), buf);
     logerror("%s logged in as country #%d", praddr(player), player->cnum);
     pr_id(player, C_INIT, "%d\n", CLIENTPROTO);
+    player->state = PS_PLAYING;
     player_main(player);
     logerror("%s logged out, country #%d", praddr(player), player->cnum);
-    player->state = PS_SHUTDOWN;
+    if (CANT_HAPPEN(!io_eof(player->iop)))
+       io_set_eof(player->iop);
     return RET_OK;
 }