World Crash: Camp Timers (?)
Moderators: Community Managers, Developers
Re: World Crash: Camp Timers (?)
I have 2 thoughts about the Unreal Channel message:
1) It means nothing: Perhaps the client continues to send it's position update packets (ServerShortMove()), and those reach the server after the actor's channel has been destroyed (through the server's logout process, I don't actually know how this part of the server code works, just guessing).
OR
2) The server code for removing the character from the world is prone to race conditions, and something is being access after it's been destroyed.
1) It means nothing: Perhaps the client continues to send it's position update packets (ServerShortMove()), and those reach the server after the actor's channel has been destroyed (through the server's logout process, I don't actually know how this part of the server code works, just guessing).
OR
2) The server code for removing the character from the world is prone to race conditions, and something is being access after it's been destroyed.
Re: World Crash: Camp Timers (?)
I should be available tonight. We can do it later if that makes it a bit easier for you Volt or we might have better luck Saturday or Sunday.
Re: World Crash: Camp Timers (?)
Ok with luck I will wake up early tomorrow but no promises (it is saturday morning after all ). Go ahead without me if you are up for it but I am happy to join in if I can.
"Gaze in amazement adventurer"
- John Adams
- Retired
- Posts: 4582
- Joined: Wed Aug 28, 2013 9:40 am
- Location: Phoenix, AZ.
- Contact:
Re: World Crash: Camp Timers (?)
Another crash related to that GetCurrentChunk function. I'm not seeing any errors coming from CampTimers::Check(), but I did notice that "character" is not being double checked, so just to try something out, I added the following code:
Volt / ??? let me know if this causes any unexpected consequence.
For proper use case testing of camp timers, think of every possible way you can to disconnect while the /camp timer is running. Exit, terminating the client in task manager, Logout, double-camping, etc. Perhaps this is happening because someone types /camp then closes the client brutally.
auto character = itr2.first;
if (!character) {
LogDebug(LOG_GENERAL, 0, "In CampTimers::Check(): UNRECOVERABLE ERROR: character == null");
continue;
}
Trying this because it seems "character" is null when this the next check is being done on auto chunk = character->GetCurrentChunk();.Volt / ??? let me know if this causes any unexpected consequence.
For proper use case testing of camp timers, think of every possible way you can to disconnect while the /camp timer is running. Exit, terminating the client in task manager, Logout, double-camping, etc. Perhaps this is happening because someone types /camp then closes the client brutally.
Re: World Crash: Camp Timers (?)
[quote="John Adams"]Volt / ??? let me know if this causes any unexpected consequence.[/quote]
That should be fine. Though, if it actually ever finds a (!character) I would need to know and ponder why and also how to more properly handle that. My current understanding is that this should never happen unless something is really broken.
That should be fine. Though, if it actually ever finds a (!character) I would need to know and ponder why and also how to more properly handle that. My current understanding is that this should never happen unless something is really broken.
"Gaze in amazement adventurer"
Re: World Crash: Camp Timers (?)
John, can I please have a db copy of Dakadin's character that is prone to crashing?
Also, what character(s) were online at the latest crash?
Also, what character(s) were online at the latest crash?
"Gaze in amazement adventurer"
- John Adams
- Retired
- Posts: 4582
- Joined: Wed Aug 28, 2013 9:40 am
- Location: Phoenix, AZ.
- Contact:
Re: World Crash: Camp Timers (?)
[quote="Volt"]John, can I please have a db copy of Dakadin's character that is prone to crashing?
Also, what character(s) were online at the latest crash?[/quote]
I do not know who was online. I thought it randomly happened to whomever. I will re-export New Telon DB full, and post it to the private SVN. Somehow I do not feel this is data-related though. Sounds like a process (starting my timer, and starting it again, quitting ahead of it, or so forth). Something QA'ish.
Also, what character(s) were online at the latest crash?[/quote]
I do not know who was online. I thought it randomly happened to whomever. I will re-export New Telon DB full, and post it to the private SVN. Somehow I do not feel this is data-related though. Sounds like a process (starting my timer, and starting it again, quitting ahead of it, or so forth). Something QA'ish.
- John Adams
- Retired
- Posts: 4582
- Joined: Wed Aug 28, 2013 9:40 am
- Location: Phoenix, AZ.
- Contact:
Re: World Crash: Camp Timers (?)
[quote="Volt"]Though, if it actually ever finds a (!character) I would need to know and ponder why and also how to more properly handle that. My current understanding is that this should never happen unless something is really broken.[/quote]
While I tend to agree with you, that something further "upstream" is likely being mishandled, we saw this in an almost constant state in EQ2Emu with pointers to disappearing objects would occur, literally BETWEEN a if( stuff ) stuff->dostuff(); meaning, between the check for if "stuff" was valid, and the execution of the very next line "stuff->dostuff();" the "stuff" became invalid.
Ask Jabantiz. This was all over EQ2's code, and none of us had a clue why. We just started dumping in validation checks everywhere and it seems to have handled the problem.
While I tend to agree with you, that something further "upstream" is likely being mishandled, we saw this in an almost constant state in EQ2Emu with pointers to disappearing objects would occur, literally BETWEEN a if( stuff ) stuff->dostuff(); meaning, between the check for if "stuff" was valid, and the execution of the very next line "stuff->dostuff();" the "stuff" became invalid.
Ask Jabantiz. This was all over EQ2's code, and none of us had a clue why. We just started dumping in validation checks everywhere and it seems to have handled the problem.
Re: World Crash: Camp Timers (?)
That was the spot Lokked and I talked about the other night. I think data somewhere has to be playing a part since it is following the same character around even after restarting the client and server. I think what is happening is something happens that some how is invalidating the character instance. This could explain why I couldn't interact with much of the world. Either my client crashes or the server crashes. I am going to try logging in with both my characters to see if I can break it with the change you added John.
- John Adams
- Retired
- Posts: 4582
- Joined: Wed Aug 28, 2013 9:40 am
- Location: Phoenix, AZ.
- Contact:
Re: World Crash: Camp Timers (?)
Ok, I am barely awake, sipping coffee, and will keep an eye on you.