Nov 8 2015, 9:03 pm
|
|
for me it's just when i have 1 game running, and as long as my computer's fan doesn't kick into high gear, then i don't lock up =/
|
Echoing the "happens for me when not playing anything else" thing. Mind you I don't often, or at all, play a byond game concurrently with anything else.
|
Here is a bug report that MIGHT shed some light on the issue:
https://github.com/tgstation/-tg-station/issues/12226 They get this to happen pretty consistently when viewing lots of orbiting ghosts. Ghost orbit uses transforms to make the user's sprite appear to orbit around something 24 pixels out. here is the code for that: https://github.com/tgstation/-tg-station/blob/ 2feedfa0093e2c30e5a4fe807a37cdaf8db57923/code/__HELPERS/ unsorted.dm#L1210 (line 1210 if it doesn't jump you automatically) Arguments used by ghost orbit are: src.orbit(thingtooribt, 24, 0) This suggests transforms OR animate MAY be involved. We do use them elsewhere a lot |
In response to MrStonedOne
|
|
The bug long predates transforms or animation, so they can be ruled out. This bug has been around since BYOND 3.0 or earlier.
|
Find the common denominator, something state wise that both animate AND transform change or fuck with, that's been around for ever.
They could be two causes of the same core issue. Especially since it does seem like there might be a link to a timing issue or clock drift. |
Transform/state changes would mean a new appearance, but that's something that happens all the time. My best guess right now is that a timing issue is the culprit, though it's hard to pin down what that could possibly be; that's only based on anecdotal evidence, though.
|
When I said state change, I was referring to internal state.
Something that processing a transform or animation (current guess is that it's animation that's causing it in the ghost orbit case because of a similar issue on /vg/ relating to abusing animate on all lighting changes) changes, or triggers state wise, that's existed since 300 and could be related. Mainly look at anything where an internal state is changed then changed back where there might be a case where it's never changed back. I don't know enough about how byond does things client side to make any better guesses than that, but just for the sake of it might help, assume these things are related, use that to try and find a potential common denominator so to speak. (Assuming you aren't already doing this.) And lets re-cap, sounds and appearances stop updating, right clicking shows the items on the tile in the frozen state, etc etc etc, so this could also be something in network code? or some abstraction intermediary about processing network data or appearances? I'd think not because apparently animations stop, be they animate() or animated sprites, unless there is some state variable that is common (or in some method called by the code) with the code of any number of: network data, appearances, animate(), ui tick loop. How ever, there is potentially two completely different issues here, since some people are fixed by text toggle, and some people aren't Regardless, that is a hint none the less, as it tells you one is fixed by doing that, and one isn't. |
I've started getting this pretty consistently as of yesterday. I get the feeling it will go away after a reboot, so while I have this happening, I'd like to help debug this.
Since I know how to computers at a high level, Could i get some things to check? I can attach ds to a debugger and add breakpoints if i know the offsets. Version 509.1315r2 I actually have 4 DS windows that this is happening to open, I'll try to keep them open for a long as I can. I can use .reconnect to make them connect to my local DD server i use for testing, as thats what they were being used for when the bug triggered. I can use text toggle to make it update once or twice, then after that there are no updates, it goes to the same state. toggle hardware acceleration doesn't seem to do anything |
The key to figuring it out is finding a project--preferably a low-overhead one--that reliably triggers the issue on all machines. If I could get it to happen to me in a controlled environment with the debugger, I could make headway on it.
Short of that, there's a slight possibility I could put together a test build that included debugging info to say what was happening on the client end. However that might not tell me the whole story, if it's the server that's screwing it up. |
We've found this bug occurs a ton in byond 511, while almost never occurring in 510. It's almost impossible for some players to play in SS13 due to the bug occurring almost every round, me being one of those players. Around 2~ players in a 25-50 person round are effected by it and have to leave.
Hilariously attempting to reproduce the bug deliberately causes it to stop occurring. |
If you're fine with giving out a debug build I'm sure we can get someone to trigger the bug with it on ss13. I have no idea if we can make a program to easily reproduce it unless we have some kind of automated script that terminates dreamseeker.exe and reconnects until the freezes start happening.
|
If it helps, I noticed that this bug never seems to trigger when I'm hosting a server through daemon on the same PC im logging in from. I also join using the connect button in daemon itself.
|
Did the text mode test, it had no effect.
What I did find while editing the variables of a frozen person's client was if I changed their view range the port would update and zoom out correctly, but instead of loading in the newly visible tiles the same frozen image is displayed zoomed out with black bar borders. |
I just tried the same thing.
Updating view range doesn't update properly after it happens. New turfs dont load in properly however turfs with large icons do show properly in the new view range. Also, the view doesn't properly center after the update. For example.... This is my normal view range http://i66.tinypic.com/34rsyf4.png If I expand the view range I get this... http://i67.tinypic.com/5lvtwg.png If I shrink it, I get... http://i67.tinypic.com/348fy3b.png I'm the character with the black hair and red shirt. statpanels also stop loading icons |
So the """""fix""""" we're having success with is telling people with the screen freeze to delete the cache folder in documents/BYOND then relogging. If that's any help.
Might be a red herring though. Yeah it's basically 50/50 on if it works so rip. |
Well relogging in-general will resolve the issue temporarily as long as you close dreamseeker and then open it again.
Using the reconnect option will just leave you with a black map. |
Hello, i just found out that world.Export() may "kill" viewport updating for a player if previous call is still in progress when we are trying to get new call or something like that. But for our server (ss13), this is only a login problem, since we use that to get IP info from external source when client logins inside "client/New()". The way how this happens - while world.Export is in progress and still havent recieved information, just relog into the server (which will start another world.Export call) and it will lock game's viewport.
Setting "set waitfor = FALSE" in a proc that uses world.Export seems to fix that issue, but i have feeling, its not a proper way to fix it. Anyway, maybe there is anyone else with this problem or it may give another valuable information. |
In response to Zve
|
|
Zve wrote:
Hello, i just found out that world.Export() may "kill" viewport updating for a player if previous call is still in progress when we are trying to get new call or something like that. But for our server (ss13), this is only a login problem, since we use that to get IP info from external source when client logins inside "client/New()". The way how this happens - while world.Export is in progress and still havent recieved information, just relog into the server (which will start another world.Export call) and it will lock game's viewport. That's interesting. But I wonder why it would impact certain players, since world.Export() is a server-side call and isn't tied to a client. |
Dunno, but i think it puts a whole client/New() procedure on pause while waiting for the answer. Anyway, i have no idea how that thing actually works.
I just put simple debug messages with some text to see, if there is any delays and to me it looks like thats is the problem. If client disconnects then shortly reconnects while world.Export still tries to get an answer - it makes view port to die. From a test it looked like that: client connected > world.Export called > client disconnected > world.Export still waiting for the answer > client connects again > new world.Export is called while old still is in progress > viewport died. i can provide a link to our repo where that world.Export is located, if that will give anything usefull. |
ya, sleeping in client/New() (world.Export() sleeps) leads to weirdness. I had one case where sending a client to a new server (in client/New()) sleeping for half a second, and then returning false to disconnect the client, would sometimes lead to the next client to connect, to never transition from the resource splash page to the skin.
I never reported it because I assumed I would just get told that sleeping in client/New() isn't recommended or supported, and because I discovered this in production and was too focused on quickly fixing it to worry about reproducing it. |