From Eric Green:
The solution is i suggested doesn't completely work, since d->str is only
allocated for writing by the mail system, not the boards and others. To
fix this, i just checked if the player was mailing before freeing d->str.
--- 8< --- 8< ---
This should fix the problem with d->str not being freed when a character
loses link while mailing.
diff -upr stk/act.wizard.c 176/act.wizard.c
--- stk/act.wizard.c Wed May 27 16:47:13 1998
+++ 176/act.wizard.c Sat Jun 6 19:13:54 1998
@@ -2348,7 +2348,8 @@ int perform_set(struct char_data *ch, st
send_to_char("No room exists with that number.\r\n", ch);
return 0;
}
- char_from_room(vict);
+ if (IN_ROOM(vict) != NOWHERE) /* Another Eric Green special. */
+ char_from_room(vict);
char_to_room(vict, i);
break;
case 36:
diff -upr stk/comm.c 176/comm.c
--- stk/comm.c Wed Apr 1 11:30:59 1998
+++ 176/comm.c Sat Jun 6 19:25:44 1998
@@ -1521,6 +1521,14 @@ void close_socket(struct descriptor_data
}
if (d->character) {
+ /*
+ * Plug memory leak, from Eric Green.
+ */
+ if (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) {
save_char(d->character, NOWHERE);
act("$n has lost $s link.", TRUE, d->character, 0, 0, TO_ROOM);
--
George Greer, greerga@circlemud.org | Genius may have its limitations, but
http://patches.van.ml.org/ | stupidity is not thus handicapped.
http://www.van.ml.org/CircleMUD/ | -- Elbert Hubbard
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST