]> git.pond.sub.org Git - empserver/commitdiff
(player_new): Proper error checking. Oops, now it may return NULL.
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 23 Jan 2004 13:44:19 +0000 (13:44 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 23 Jan 2004 13:44:19 +0000 (13:44 +0000)
Proper error checking in callers required.
(update_wait, market_update): If player_new() returns null pointer,
skip update.
(player_accept): If player_new() returns null pointer, close
connection.

src/lib/player/accept.c
src/server/marketup.c
src/server/update.c

index aa9ee30ec3578c581462e68dc54028bb7ecd6540..cd31de67f115a54fcff8759f106d8179170feec9 100644 (file)
@@ -77,10 +77,18 @@ player_new(int s, struct sockaddr_in *sin)
     struct hostent *hostp;
 
     lp = (struct player *)malloc(sizeof(struct player));
+    if (!lp)
+      return NULL;
     memset(lp, 0, sizeof(struct player));
     if (sin) {
-       /* update uses dummy player */
-       /* so does the market updater */
+       /* real player, not dummy created by update and market update */
+       lp->iop = io_open(s,
+                         IO_READ | IO_WRITE | IO_NBLOCK,
+                         IO_BUFSIZE, 0, 0);
+       if (!lp->iop) {
+           free(lp);
+           return NULL;
+       }
        emp_insque(&lp->queue, &Players);
        strcpy(lp->hostaddr, inet_ntoa(sin->sin_addr));
 #ifdef RESOLVE_IPADDRESS
@@ -93,8 +101,6 @@ player_new(int s, struct sockaddr_in *sin)
        lp->cnum = 255;
        lp->curid = -1;
        time(&lp->curup);
-       lp->iop = io_open(s, IO_READ | IO_WRITE | IO_NBLOCK,
-                         IO_BUFSIZE, 0, 0);
     }
     return lp;
 }
@@ -260,6 +266,11 @@ player_accept(void *argv)
            continue;
        }
        np = player_new(ns, &sin);
+       if (!np) {
+           logerror("can't create player for fd %d", ns);
+           close(ns);
+           continue;
+       }
        /* XXX may not be big enough */
        stacksize = 100000
 /* budget */  + max(WORLD_X * WORLD_Y / 2 * sizeof(int) * 7,
index dacf515a7351718d94a565544505840f521e69df..1f015eb5a25ac113cebf45e2bcc9d50b4c1933a2 100644 (file)
@@ -77,8 +77,12 @@ void *argv;
        time(&now);
 /*     logerror("Checking the world markets at %s", ctime(&now));*/
        dp = player_new(0, 0);
-       empth_create(PP_UPDATE, check_all_markets, (50 * 1024), 0,
-                    "MarketCheck", "Checks the world markets", dp);
+       if (dp) {
+           empth_create(PP_UPDATE, check_all_markets, (50 * 1024), 0,
+                        "MarketCheck", "Checks the world markets", dp);
+       } else {
+           logerror("can't create dummy player for market update");
+       }
        now = now + 300;        /* Every 5 minutes */
        empth_sleep(now);
     }
index f519dad8ba6371c42f1d939037863f0c6ff91e6a..a3f9a8adab6a3f3edf23dc5c4f02b0e181514e6e 100644 (file)
@@ -142,6 +142,10 @@ void *argv;
         * in the land so it can finish before it yields.
         */
        dp = player_new(0, 0);
+       if (!dp) {
+           logerror("can't create dummy player for update");
+           continue;
+       }
        stacksize = 100000 +
 /* finish_sects */ WORLD_X * WORLD_Y * (2 * sizeof(double) +
                                        sizeof(s_char *));