Go Back   EQEmulator Home > EQEmulator Forums > Support > Support::Windows Servers

Support::Windows Servers Support forum for Windows EQEMu users.

Reply
 
Thread Tools Display Modes
  #1  
Old 10-13-2011, 12:49 PM
bodi
Hill Giant
 
Join Date: May 2010
Posts: 105
Default Crash zone.exe when clicking doors in HS and VP

As soon as anyone on the server with any client zones into howling stones and clicks on a door, it crashes the zone server and I have to restart the server. HALP! I have closed howling stones and VP until we get it fixed
Reply With Quote
  #2  
Old 10-13-2011, 03:31 PM
lerxst2112
Demi-God
 
Join Date: Aug 2010
Posts: 1,742
Default

Look in the zone logs to see if you can find any errors. You can also run the zone in the debugger to find out exactly where it is crashing.
Reply With Quote
  #3  
Old 03-01-2012, 10:52 AM
lockjaws
Fire Beetle
 
Join Date: Jun 2008
Location: UK
Posts: 13
Default

Bodi Did you manage to find out what was causing this issue? As i'm having the same exact issue.
Reply With Quote
  #4  
Old 03-01-2012, 01:43 PM
lockjaws
Fire Beetle
 
Join Date: Jun 2008
Location: UK
Posts: 13
Default

Having gone through this wonderful post

http://www.eqemulator.org/forums/sho...ighlight=debug
I was able to create a call stack from the zone debugging.

This was in Charasis (howlingstones) when clicking on the west top platform door.
Any help with this is Greatly Appreciated, Thanks.
Code:
>	Zone.exe!EntityList::GetEntityCorpse(unsigned short id=553)  Line 886 + 0x14 bytes	C++
 	Zone.exe!EntityList::GetID(unsigned short get_id=553)  Line 973 + 0xf bytes	C++
 	Zone.exe!EntityList::GetFreeID()  Line 1166 + 0xd bytes	C++
 	Zone.exe!EntityList::AddCorpse(Corpse * corpse=0x0d7d1260, unsigned int in_id=4294967295)  Line 591 + 0x8 bytes	C++
 	Zone.exe!ZoneDatabase::LoadPlayerCorpse(unsigned int player_corpse_id=3516)  Line 1743	C++
 	Zone.exe!ZoneDatabase::GetPlayerCorpseItemAt(unsigned int corpse_id=3516, unsigned short slotid=16)  Line 1618 + 0xc bytes	C++
 	Zone.exe!XS_Client_GetCorpseItemAt(interpreter * my_perl=0x02a71024, cv * cv=0x0b9284c4)  Line 5113 + 0x13 bytes	C++
 	perl510.dll!28047f15() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for perl510.dll]	
 	perl510.dll!2806ef18() 	
 	perl510.dll!2802a27f() 	
 	perl510.dll!28029f9b() 	
 	Zone.exe!Embperl::dosub(const char * subname=0x0c542a08, const std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > * args=[...](), int mode=6)  Line 346 + 0x13 bytes	C++
 	Zone.exe!PerlXSParser::SendCommands(const char * pkgprefix=0x0018f0d4, const char * event=0x008db610, unsigned int npcid=0, Mob * other=0x0c503fa0, Mob * mob=0x0c503fa0, ItemInst * iteminst=0x00000000)  Line 159 + 0xe3 bytes	C++
 	Zone.exe!PerlembParser::EventCommon(QuestEventID event=EVENT_CLICKDOOR, unsigned int objid=0, const char * data=0x0018f164, NPC * npcmob=0x00000000, ItemInst * iteminst=0x00000000, Mob * mob=0x0c503fa0, unsigned int extradata=0)  Line 775 + 0x2c bytes	C++
 	Zone.exe!PerlembParser::EventPlayer(QuestEventID evt=EVENT_CLICKDOOR, Client * client=0x0c503fa0, std::basic_string<char,std::char_traits<char>,std::allocator<char> > data="11 0", unsigned int extra_data=0)  Line 802	C++
 	Zone.exe!QuestParserCollection::EventPlayer(QuestEventID evt=EVENT_CLICKDOOR, Client * client=0x0c503fa0, std::basic_string<char,std::char_traits<char>,std::allocator<char> > data="11 0", unsigned int extra_data=0)  Line 161	C++
 	Zone.exe!Client::Handle_OP_ClickDoor(const EQApplicationPacket * app=0x0c5429d0)  Line 5959	C++
 	Zone.exe!Client::HandlePacket(const EQApplicationPacket * app=0x0c5429d0)  Line 456	C++
 	Zone.exe!Client::Process()  Line 740 + 0xf bytes	C++
 	Zone.exe!EntityList::MobProcess()  Line 488 + 0x1a bytes	C++
 	Zone.exe!main(int argc=3, char * * argv=0x02c31a80)  Line 480	C++
 	Zone.exe!__tmainCRTStartup()  Line 266 + 0x12 bytes	C
 	kernel32.dll!75873677() 	
 	ntdll.dll!77b39f02() 	
 	ntdll.dll!77b39ed5() 	
	Zone.exe!Parser::LoadScript(int npcid=-1961784568, const char * zone=0x8b500842, Mob * activater=0xe851d84d)  Line 1071 + 0x27 bytes	C++
 	4d8b0000()
where the > is it points to this

Code:
>          if (iterator.GetData()->GetID() == id)
		{
			return iterator.GetData();
		}
		iterator.Advance();
	}
	return 0;
Reply With Quote
  #5  
Old 03-02-2012, 12:09 AM
lockjaws
Fire Beetle
 
Join Date: Jun 2008
Location: UK
Posts: 13
Default

Fixed the issue after looking at the last entry in the call stack debugger log

Code:
Zone.exe!EntityList::GetEntityCorpse(unsigned short id=553)  Line 886 + 0x14 bytes	C++

I emptied the player corpses table, logged back into the test server and hey presto it's no longer crashing and giving the correct blue text

This is Locked!
Reply With Quote
  #6  
Old 09-15-2012, 07:11 PM
Tabasco's Avatar
Tabasco
Discordant
 
Join Date: Sep 2009
Posts: 269
Default

I'm getting this in various places. It can happen with doors or hailing certain NPC's and the debugging results all point to that GetEntityCorpse prototype.

Has anyone else dealt with this? I've cleared my player corpses table and it's good for a while but it crops back up.
Reply With Quote
  #7  
Old 09-23-2012, 12:26 AM
Uleat's Avatar
Uleat
Developer
 
Join Date: Apr 2012
Location: North Carolina
Posts: 2,815
Default

[bump] Before I started in on the inverted doors fix some time ago, I actually used to play...

I think I remember having this issue as well way back in April, but it seemed to go away when I started using perl 5.12 and made sure my plugins were up to date.

I haven't been charasis or veeshan's lately, so I'm not sure if that was an absolute fix or not. When I get my setup going 100% going again, I'll see if I can
get perl to act up there for me.
__________________
Uleat of Bertoxxulous

Compilin' Dirty
Reply With Quote
  #8  
Old 10-08-2012, 01:57 PM
Dunge0nMastr
Hill Giant
 
Join Date: Oct 2002
Location: Rockville, MD
Posts: 124
Default

After having an issue related to this i found that the problem was in the
check_hasitem.pl plugin.

basically the reason clearing corpse table was causing it to work was because of these lines in that plugin:

Code:
#Check corpses
  if ($body_count > 0) {
    for ($i=1; $i<=$body_count; $i++) {
      $body_id = $client->GetCorpseID($i);
      for ($slot1=0; $slot1<=30; $slot1++) {
        $itemid1 = $client->GetCorpseItemAt($body_id, $slot1);
        if ($itemid1 == $itmchk) {
          return 1;
        }
      }
      for ($slot1=251; $slot1<=340; $slot1++) {
        $itemid1 = $client->GetCorpseItemAt($body_id, $slot1);
        if ($itemid1 == $itmchk) {
          return 1;
        }
      }
    }
  }
removing this seemed to solve the issue - i noticed it when i realized that the crashes were only occuring in zones where player.pl governed the locking/unlocking of doors, it also solved a crash within my scripts for checking if players had completed their 1.0s before moving on to a new quest
(using quest::check_hasitem($client, $item_id); )

seems to have fixed it all up removing that block from the plugin. Hope this helps others experiencing it :P
__________________
Bront -Server Admin/Owner and Lead Quest Dev for Kildrukaun's Prophecy
http://kpemu.com/
Reply With Quote
  #9  
Old 10-12-2012, 08:21 AM
Tabasco's Avatar
Tabasco
Discordant
 
Join Date: Sep 2009
Posts: 269
Default

I ended up disabling shadowrest and reducing corpse times as a band-aid until I could dig into it further.
This was very helpful, thanks.
Reply With Quote
  #10  
Old 10-12-2012, 08:44 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Maybe a sanity check is needed for "while(1)" ?

Code:
int16 EntityList::GetFreeID()
{
	if(last_insert_id > 1500)
		last_insert_id = 0;
	int16 getid=last_insert_id;
	while(1)
	{
		getid++;
		if (GetID(getid) == 0)
		{
			last_insert_id = getid;
			return getid;
		}
	}
}
Seems like that could easily cause an infinite loop if last_insert_id is really high to begin with. Either way, it seems like a bad idea to use "while(1)" to me.

Here is EntityList::GetID() for reference:

Code:
Entity* EntityList::GetID(int16 get_id)
{
	Entity* ent=0;
	if((ent=entity_list.GetEntityMob(get_id))!=0)
		return ent;
	else if((ent=entity_list.GetEntityDoor(get_id))!=0)
		return ent;
	else if((ent=entity_list.GetEntityCorpse(get_id))!=0)
		return ent;
//	else if((ent=entity_list.GetEntityGroup(get_id))!=0)
//		return ent;
	else if((ent=entity_list.GetEntityObject(get_id))!=0)
		return ent;
	else if((ent=entity_list.GetEntityTrap(get_id))!=0)
		return ent;
	else if((ent=entity_list.GetEntityBeacon(get_id))!=0)
		return ent;
	else
		return 0;
}
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!

Last edited by trevius; 10-12-2012 at 08:52 AM..
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 09:07 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3