]> git.pond.sub.org Git - empserver/commitdiff
(getplayer): There may be multiple players for the same country in the
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 2 Oct 2005 16:21:41 +0000 (16:21 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 2 Oct 2005 16:21:41 +0000 (16:21 +0000)
list of players, but at most one in state PS_PLAYING.  getplayer()
used to get the one first in the list.  However, its callers need the
one in state PS_PLAYING.  In particular, typed_wu() notifies the
player obtained from getplayer().  If the player in state PS_PLAYING
isn't first, say because another one is trying to log in, the
notification gets lost.  Fix by making getplayer() return the player
in state PS_PLAYING.

src/lib/player/accept.c

index b3d8c9d79fe6c4e9c0f36d27142f6c7b3b359931..55a4050a1c212109a13acfc789e0d6b8e5a76202 100644 (file)
@@ -209,16 +209,22 @@ player_prev(struct player *lp)
     return lp;
 }
 
+/*
+ * Return player in state PS_PLAYING for CNUM.
+ */
 struct player *
 getplayer(natid cnum)
 {
-    register struct emp_qelem *qp;
+    struct emp_qelem *qp;
+    struct player *pl;
 
-    for (qp = Players.q_forw; qp != &Players; qp = qp->q_forw)
-       if (((struct player *)qp)->cnum == cnum)
-           return (struct player *)qp;
+    for (qp = Players.q_forw; qp != &Players; qp = qp->q_forw) {
+       pl = (struct player *)qp;
+       if (pl->cnum == cnum && pl->state == PS_PLAYING)
+           return pl;
+    }
 
-    return 0;
+    return NULL;
 }
 
 struct player *