Mobprogs and how to imp them on Merc/Envy muds so I took a look and in the context of the page I found this: The cause of the famous 'memory leak' I believe I have tracked down. The stock MOBprogram code loses memory when there are zones with MOBprograms on the mobiles and no players. I'm not sure if the circle port does this, bieng that I don't use it, but I thought this bit of info might be helpful to those who do use mobprogs. Here is the solution give to fix this problem of Envy 1.0: Under Envy 1.0, I put this code into aggr_update(), after the descriptor loop was done. This goes through all of the characters looking for MOBprograms. I believe the 'optimization' not to do the actions when no players were in the zone was the cause of people's 'memory leaks', theline '(wch->in_room->area->nplayer > 0)' in the if(). See, if "the kobold leaves north" every minute that is 25 bytes * 60min/hour or 1.5k per hour times say 10 mobiles times 100 mobprogrammed mobiles in zones without players is 1.5megs/hour of leaks. All of these mobprograms are going to fire, too, the first time a player enters the zone, which is probably not what was intended. // Now respond to MOBprograms--Slash for ( ch = char_list; ch != NULL; ch = wch_next ) { wch_next = ch->next; /* MOBProgram ACT_PROG trigger */ if ( IS_NPC( ch ) && ch->mpactnum > 0) // Merc 2.2 only freed this memory when a player was in the zone, I see // no reason to wait for that to happen--Slash // && wch->in_room->area->nplayer > 0 ) { // Examine everything the mobile heard since the last aggr_update(), and // respond to it MPROG_ACT_LIST * tmp_act, *tmp2_act; for ( tmp_act = ch->mpact; tmp_act != NULL; tmp_act = tmp_act->next ) { mprog_wordlist_check( tmp_act->buf, ch, tmp_act->ch, tmp_act->obj, tmp_act->vo, ACT_PROG ); free_string( tmp_act->buf ); } // Free the memory allocated to the 'act() memory' for ( tmp_act = ch->mpact; tmp_act != NULL; tmp_act = tmp2_act ) { tmp2_act = tmp_act->next; free_mem( tmp_act, sizeof( MPROG_ACT_LIST ) ); } // Zap the pointer to the memory ch->mpactnum = 0; ch->mpact = NULL; } } Hope this info helps the people out there suffering from memory leaks. Zeke +-----------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://cspo.queensu.ca/~fletcher/Circle/list_faq.html | +-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/07/00 PST