From: Peep P. <so...@us...> - 2004-06-12 20:09:21
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28089 Modified Files: net.c Log Message: Remove destructed object from to_be_dested list after destructing. Index: net.c =================================================================== RCS file: /cvsroot/agd/server/src/net.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- net.c 8 Jun 2004 20:44:53 -0000 1.16 +++ net.c 12 Jun 2004 20:09:13 -0000 1.17 @@ -16,7 +16,7 @@ #include "net.h" #include "interpret.h" -#define LOOP_PLAYERS() for(l=&players;l->next;l=l->next) { player_t *pl = l->data; +#define LOOP_PLAYERS() for(l=&players;l&&(l->data||l->next);l=l->next) { player_t *pl = l->data; list_t players; @@ -100,7 +100,8 @@ this_player = p; player_ob = xmalloc(sizeof(object_t)); player_ob->iaob = p; - player_ob->name = "NONE"; /* So find_object() won't barf. */ + /* So find_object() won't barf. Have to copy because it will be freed. */ + player_ob->name = stringdup("LOGIN"); player_ob->prog = NULL; this_ob = p->ob = player_ob; @@ -221,8 +222,16 @@ for(p = &to_be_dested; p; p=p->next) { object_t *ob = p->data; - if(ob->flags & O_DESTRUCTED) + if(ob->flags & O_DESTRUCTED) { + if(p->next) { + list_t temp = *p->next; + *p = temp; + } else { + p->data = NULL; + } + actual_destruct(ob); + } } } |