Page 1 of 3

World Crash - KickDupeClients

Posted: Mon Nov 24, 2014 6:30 pm
by John Adams
Thought I had a bug for this before... so here's the one for right now.

Stack;

Code: Select all

 	ntdll.dll!77398277()	Unknown
 	[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]	
>	WorldServer.exe!Mutex::ReadLock() Line 99	C++
 	WorldServer.exe!UDPServer::GetClient(unsigned int account_id) Line 194	C++
 	WorldServer.exe!ChunkServer::GetClient(unsigned int account_id) Line 277	C++
 	WorldServer.exe!UDPServer::KickDupeClients(unsigned int account_id, unsigned int connection_id) Line 258	C++
 	WorldServer.exe!Net::HandleCharacterSelected(std::shared_ptr<Client> & client, PacketStruct * packet_struct) Line 390	C++
 	WorldServer.exe!Net::Process() Line 159	C++
 	WorldServer.exe!main(int argc, char * * argv) Line 189	C++
 	WorldServer.exe!__tmainCRTStartup() Line 241	C
 	WorldServer.exe!mainCRTStartup() Line 164	C
 	kernel32.dll!7574338a()	Unknown
 	ntdll.dll!77329f72()	Unknown
 	ntdll.dll!77329f45()	Unknown
Code:

Code: Select all

void Mutex::ReadLock() {
#if defined(_WIN32)
# if defined(VG_DEBUG)
    timem_t start = TimeMS();

    while (!TryAcquireSRWLockShared(&lock)) {  // <== here
        if ((TimeMS() - start > MUTEX_TIMEOUT)) {
&lock is empty -- first time I've seen that

Code: Select all

-		&lock	0x00000390 {Ptr=??? }	_RTL_SRWLOCK *
		Ptr	<Unable to read memory>	
		start	18446744073249213183	unsigned __int64
+		this	0x00000370 {name=0x00000370 <Error reading characters of string.> lock={Ptr=??? } }	Mutex *
Naturally, we only have big crashes when there are 5+ people online

Re: World Crash - KickDupeClients

Posted: Thu Dec 11, 2014 7:18 pm
by John Adams
Sitting here watching New Telon, this crash just happened again. Any ideas?

Re: World Crash - KickDupeClients

Posted: Fri Dec 12, 2014 3:40 am
by Lokked
The lock object must not be initializing or is being deleted somewhere, but this seems almost impossible. I'll think about it. Perhaps a try catch can give us a change to report more.

How many were on? Was the player logging in a different char than what they've disconnected with, and into a different chunk?

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 7:49 am
by John Adams
From what it looked like, it was 1 character (Vurgood) and 1 chunk. I think that's usually the only character he logs in with.

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 2:35 pm
by John Adams
Today it was Zarlore. Maybe he'll see this and remember what was happening at the time. From the console, it appears he was at character select, with what looks like another character online in the world before him. If people hitting Char Select (only) is corrupting in-game connections, we got bigger problems than before.

Stack (the same)

Code: Select all

 	ntdll.dll!774c8277()	Unknown
 	[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]	
>	WorldServer.exe!Mutex::ReadLock() Line 99	C++
 	WorldServer.exe!UDPServer::GetClient(unsigned int account_id) Line 194	C++
 	WorldServer.exe!ChunkServer::GetClient(unsigned int account_id) Line 278	C++
 	WorldServer.exe!UDPServer::KickDupeClients(unsigned int account_id, unsigned int connection_id) Line 258	C++
 	WorldServer.exe!Net::HandleCharacterSelected(std::shared_ptr<Client> & client, PacketStruct * packet_struct) Line 390	C++
 	WorldServer.exe!Net::Process() Line 159	C++
 	WorldServer.exe!main(int argc, char * * argv) Line 189	C++
 	WorldServer.exe!__tmainCRTStartup() Line 241	C
 	WorldServer.exe!mainCRTStartup() Line 164	C
 	kernel32.dll!75c2338a()	Unknown
 	ntdll.dll!77459f72()	Unknown
 	ntdll.dll!77459f45()	Unknown
Vars:

Code: Select all

-		&lock	0x00000390 {Ptr=??? }	_RTL_SRWLOCK *
		Ptr	<Unable to read memory>	
		start	1166794971	unsigned __int64
-		this	0x00000370 {name=0x00000370 <Error reading characters of string.> lock={Ptr=??? } }	Mutex *
-		name	0x00000370 <Error reading characters of string.>	char[32]
		[0]	<Unable to read memory>	
		[1]	<Unable to read memory>	
		[2]	<Unable to read memory>	
		[3]	<Unable to read memory>	
		[4]	<Unable to read memory>	
		[5]	<Unable to read memory>	
		[6]	<Unable to read memory>	
		[7]	<Unable to read memory>	
		[8]	<Unable to read memory>	
		[9]	<Unable to read memory>	
		[10]	<Unable to read memory>	
		[11]	<Unable to read memory>	
		[12]	<Unable to read memory>	
		[13]	<Unable to read memory>	
		[14]	<Unable to read memory>	
		[15]	<Unable to read memory>	
		[16]	<Unable to read memory>	
		[17]	<Unable to read memory>	
		[18]	<Unable to read memory>	
		[19]	<Unable to read memory>	
		[20]	<Unable to read memory>	
		[21]	<Unable to read memory>	
		[22]	<Unable to read memory>	
		[23]	<Unable to read memory>	
		[24]	<Unable to read memory>	
		[25]	<Unable to read memory>	
		[26]	<Unable to read memory>	
		[27]	<Unable to read memory>	
		[28]	<Unable to read memory>	
		[29]	<Unable to read memory>	
		[30]	<Unable to read memory>	
		[31]	<Unable to read memory>	
-		lock	{Ptr=??? }	_RTL_SRWLOCK
		Ptr	<Unable to read memory>	
Console

[The extension log has been deactivated and can no longer be displayed.]

fwiw, this particular behavior is new (as in the last month or so), so it should be easy to track down what changed. Maybe it's the quick fix Lokked put in to try and clear reconnects? Could we be nuking a Lock before we're supposed to?

Which naturally brings me back to the question I've asked a dozen times; why are we not just killing all in-world connections when an Account requests a list of characters? I'm still not sure I understand why this is not the solution to all our reconnect issues.

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 2:42 pm
by John Adams
Okay, this is worse than ever. I literally just restarted the world, Logged in fully as myself. Zarlore, god rest his soul, logs in right after me and I believe crashed out or something, because the second he hit character select again, the world crashed (above).

Could just be his character? I don't want to have to do a character wipe, I was waiting until Stats were done and 0.3 to begin, but if we're chasing our tails, we need to figure that out now. Nothing, not even bad data, should ever crash the world.

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 2:44 pm
by Glaxono
what the... I just replied a few moments ago and it didnt show up in this thread

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 2:46 pm
by Glaxono
OK... here is what happened with login today:

I was able to get to Character select - OK
I was able to select any one of my characters - OK
But then I get "Connecting [character name] ... and I eventually time out and closed to desktop

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 2:49 pm
by John Adams
Glaxono, just for clarity, you are Zarlore, right? Does this happen with all the characters you created, or just one in particular?

Re: World Crash - KickDupeClients

Posted: Sat Dec 13, 2014 2:52 pm
by Glaxono
My test characters are Zarlore, Earful, Littleman

They all did the same thing. I was just about to try a new account to see if it is just bugged up previous chracters