World Crash - no idea!

Old bugs stored here for reference.
Locked
User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

World Crash - no idea!

Post by John Adams » Sun Feb 05, 2012 5:28 pm

Xinux strikes again. He can tell you what he was doing, but it consisted of logging in and out I believe.

Code: Select all

 	EQ2World.exe!std::_Tree<std::_Tmap_traits<Entity *,Spell *,std::less<Entity *>,std::allocator<std::pair<Entity * const,Spell *> >,0> >::_Eqrange(Entity * const & _Keyval)  Line 1541 + 0x3 bytes	C++
 	EQ2World.exe!Spawn::AllowedAccess(Spawn * spawn)  Line 622 + 0x19 bytes	C++
 	EQ2World.exe!Player::ShouldSendSpawn(Spawn * spawn)  Line 2800 + 0x63 bytes	C++
 	EQ2World.exe!ZoneServer::CheckSendSpawnToClient(Client * client, bool initial_login)  Line 714 + 0x17 bytes	C++
 	EQ2World.exe!ZoneServer::SendZoneSpawns(Client * client)  Line 3233	C++
>	EQ2World.exe!SendInitialSpawns(void * tmp)  Line 4071	C++
 	EQ2World.exe!_callthreadstart()  Line 259 + 0x6 bytes	C
 	EQ2World.exe!_threadstart(void * ptd)  Line 241 + 0x5 bytes	C
 	kernel32.dll!77e6482f() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]	

User avatar
xinux
Team Member
Posts: 680
Joined: Wed Mar 10, 2010 11:10 am
Location: Destroyer of Servers

Re: World Crash - no idea!

Post by xinux » Sun Feb 05, 2012 7:46 pm

[16:25] <~john> wow, what the hell error is that?
[16:29] <~john> rebuilding. up soon.
[18:01] <@Xinux> i know i'm good ;)
[18:03] <@Xinux> what i was doing i had both accounts in /zone 2 they could see each over fine camped account B cameback account A could not see account B so i /zone 3 with account B then i /zone 2 with account B and locked up on loading ui resources
[18:11] <@Xinux> yup as long as i /zone and come back characters can see each other this fine but if i /camp and log back in the character that stayed logged in does not see him
[18:11] <~john> I'll bet it's LE's linkdead code then. Scat suspected that years ago.
[18:11] <~john> nice work, Sherlock :)
[18:12] <@Xinux> yup just logged both characters out and back in and tey cannot see each other
[18:12] <@Xinux> i bet if i wait till the zone releases and log in they will see each other
[18:13] <~john> DO IT
[18:13] <@Xinux> well let me know when it unloads the zone
[18:13] <~john> if it's the LD code, you should only have to wait til the player is completely disco'd
[18:13] <~john> 60s, maybe?
[18:14] <@Xinux> zone release is what 5 minutes?
[18:14] <@Xinux> and character is 60 seconds
[18:14] <@Xinux> ?
[18:14] <~john> yeah. configurable.
[18:14] <~john> zone is, char is not.
[18:15] <@Xinux> Think i killed the server again logging the second account in
[18:16] <@Xinux> i can see him but stuck at loading ui resources
[18:17] <~john> don't you have your own server? :p
[18:17] <@Xinux> hey using the test server for testing ;)
[18:17] <~john> not when it's down, you cannot ;)
[18:17] <@Xinux> lol true
[18:18] <~john> hmm, can't remember where the timer is on how long before you are considered LD.
[18:18] <@Xinux> well good thing is i got /ignore tested and ignore does ignore say/tell/whisper/ooc/shout/emote/guild/grou p
[18:19] <@Xinux> forced closed my client and i disappeared out of the world
[18:20] <~john> server says 3 players.
[18:20] <@Xinux> well didn;t kill the world atleast
[18:20] <~john> is it lying?
[18:20] <@Xinux> logged in can't see him so going to zone out and back in
[18:21] <@Xinux> yes should only be 2
[18:21] <~john> could be part of our problem. clients not getting disco'd
[18:21] <~john> when you zoned, it just said 4 clients for a sec, then back to 3.
[18:21] <~john> and now says 4 again.
[18:21] <~john> and now 3.
[18:21] <@Xinux> yup /zoned out just fne went to /zone back in and stuck again
[18:21] <@Xinux> fine
[18:22] <~john> and now 2.
[18:22] <@Xinux> going to force close again
[18:22] <@Xinux> o wow i can do commands even tho all i see is the loading ui resources
[18:23] <~john> lol
[18:23] <@Xinux> can only move not do /commands
[18:28] <@Xinux> waited about 1 minute and 1/2 this time and zoned back and loaded this time
[18:28] <@Xinux> and both can see eacher other
[18:29] <@Xinux> going to camp 1 client wautr 2 minutes then log in
[18:32] <@Xinux> nope still can't see him so what is the differnce in logging in and zneing into a zone that is already running
[18:32] <@Xinux> zoneing
[18:33] <@Xinux> and stuck on loading ui resources again when i try to /zone back after zoneing out
[18:34] <~john> how many chars are in-game right now?
[18:34] <@Xinux> 1 other i had to force close and sitting at the login screen
[18:35] <@Xinux> waiting like 2 minutes before i log him back in
[18:35] <~john> i see 2 clients, 2 zones.
[18:35] <@Xinux> 2 zones is right
[18:35] <@Xinux> case i /zone 3 then /zone 2
[18:35] <@Xinux> cause
[18:36] <~john> 1 client, 2 zones.
[18:36] <@Xinux> seem's if i /zone back to the one i just came from to quickly it locks
[18:36] <@Xinux> and just logged in
[18:36] <~john> there is a DEBUG for toggling players OFFLINE. bolded specifically because we were trying to trace players disconnections.
[18:37] <~john> if you saw this on your own server, you could see when a player finally gets dropped from World.
[18:38] <@Xinux> just campped 1 and now coming back in with him
[18:38] <@Xinux> logged in but cannot see character already in the zone
[18:38] <@Xinux> just /zone 3 with the guy i just logged back in
[18:39] <@Xinux> now going to /zone 2
[18:39] <@Xinux> zoned ok and both can see each other now
[18:41] <@Xinux> yup camped and logged back in and character already in the zone cannot see the one that just logged in again
[18:42] <~john> i'm going to guess it's because when you log back in, you get a new entity ID or something, and that is not being sent to all clients, because you are the same dude "coming back from LD"
[18:42] <@Xinux> well /zone 3 then /zone 2 character can see him now but client stuck on loading resources again this time
[18:42] <~john> post all this info for Scatman, we'll look at it this week.
[18:42] <~john> that stuck thing is something different. probably the root cause of our big zone lockup issue.
[18:43] <@Xinux> character is showing up and you can move him but that is it :(
EQ II - Build=1360 (Orig) - Build=1360 (DoF) - Build=2654 (KoS) - Build=3375 (Classic) - Build=3554 (EoF)
EQ II - Build=4412 (RoK) - Build=5122 (TSO) - Build=6118 (SF) - Build=7628 (DoV) - Build=8295 (Aod)

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: World Crash - no idea!

Post by John Adams » Sat Jul 14, 2012 8:33 am

There are a lot of critical bugs relating to crashing clients, logging in and out, linkdead code and a few others. Jabantiz might be on the trail to fixing one of them, here is the IRC log. I will be messing with this today until he shows up with a better solution.

We cannot eliminate our LD code, it is there for a reason (to best emulate Live) but if it solves some problems in the interim, I am okay with eventually re-adding it, maybe after a re-write and we understand it better.
[19:38] <@Jabantiz> ok world is adding a new client
[19:38] <@Jabantiz> typing here to help me think btw, don't expect a reply
[19:42] <@Jabantiz> the server compares ports to see if it is the same stream
[20:10] <@Jabantiz> ok from what i can tell (may be way off) login server passes the world a stream, world then checks to seeif it is identical to any current streams by comparing ip and port, however port will proabbly never be the same
[20:10] <@Jabantiz> so it adds a new client, this new client seems to fight with the old client and the break every thing in theirbrawl
[20:38] <@Jabantiz> ok no clue on this one, not sure how to compare the streams
[20:40] <@Jabantiz> a quick hack job to prevent the errors is to add RemoveClientImmediately(client); right underconnected_clients.Remove(client, true, LD_Timer); and you can log back in without errors but essentially no ld code
[20:41] <@Jabantiz> or probably better to have RemoveImmediately replace both the .Remove calls, like i said a quick hack to prevent the exceptions though
[20:44] <@Jabantiz> the bright side of this little hack, the invis client thing is gone no matter what i try
[21:34] <@Jabantiz> ok went into client::HandlePacket() added a bunch of logging for OP_LoginByNumRequestMsg in theswitch() a returning client hits every thing it should before the zone crashes, old client *should* be gone so i am lost
[22:35] <@Jabantiz> ok my callstack says that the crash occurs on this line
[22:35] <@Jabantiz> if(!spawn->IsPlayer() || (spawn->IsPlayer() && (spawn->info_changed || spawn->vis_changed))){
[22:36] <@Jabantiz> that is in ZoneServer::SendSpawnChanges
[22:36] <@Jabantiz> not sure how accurate the callstack is though, i would still recomend to use the quick hack
This is proof that what I've been saying all along, the invisible toon issue has been caused by the LD code. I love being right.

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: World Crash - no idea!

Post by Jabantiz » Sat Jul 14, 2012 2:23 pm

I agree that we can't get rid of our LD code, my hack was just a quick fix to stop the zone exception. As fo the LD code, I think I have a grasp of how it is suppose to work, I am just not sure where it is going wrong yet.

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: World Crash - no idea!

Post by John Adams » Sat Jul 14, 2012 2:28 pm

See my other posts all over the place ;) I think I'm onto the LD code issue, at least detecting whether or not it truly is an LD.

ACTIVITY_STATUS_CAMPING is never checked, and not even set. Working on that now.

Locked

Who is online

Users browsing this forum: No registered users and 0 guests