Juliano Ravasi Ferraz wrote: > > I have found a bug on CircleMUD 3.0 bpl18, envolving the > close_socket() and the SWITCH command. Here is a simple way > to reproduce it (greetings and motds stripped): This has been fixed in CVS, try the following patch: $cvs diff -D 2001-05-18 -D 2001-05-19 comm.c Index: comm.c =================================================================== RCS file: /home/circledb/cvs/circle/src/comm.c,v retrieving revision 1.88 retrieving revision 1.90 diff -u -p -r1.88 -r1.90 --- comm.c 2001/03/19 02:58:58 1.88 +++ comm.c 2001/05/18 17:39:31 1.90 @@ -1807,14 +1806,16 @@ void close_socket(struct descriptor_data } if (d->character) { - /* - * Plug memory leak, from Eric Green. - */ + /* If we're switched, this resets the mobile taken. */ + d->character->desc = NULL; + + /* Plug memory leak, from Eric Green. */ if (!IS_NPC(d->character) && PLR_FLAGGED(d->character, PLR_MAILING) && d->str) { if (*(d->str)) free(*(d->str)); free(d->str); } + if (STATE(d) == CON_PLAYING || STATE(d) == CON_DISCONNECT) { struct char_data *link_challenged = d->original ? d->original : d->character; @@ -1823,7 +1824,6 @@ void close_socket(struct descriptor_data save_char(link_challenged, NOWHERE); sprintf(buf, "Closing link to: %s.", GET_NAME(link_challenged)); mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(link_challenged)), TRUE); - link_challenged->desc = NULL; } else { sprintf(buf, "Losing player: %s.", GET_NAME(d->character) ? GET_NAME(d->character) : "<null>"); -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/05/01 PST