image
11-03-2016, 10:49 AM
I am pretty confident my world server encountered this issue after doing a code inspection and it seems the eqemu code is still susceptible to this problem.
https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L293 -> https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L310 -> https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L504
we double lock MState which is not possible so it becomes a deadspin/deadlock whatever you want to call it.
Need to remove the lock of MState in ClearBuffers: https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L504
So far no issues in my testing, but its hard to test all disconnect paths manually so gotta let it run.
https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L293 -> https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L310 -> https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L504
we double lock MState which is not possible so it becomes a deadspin/deadlock whatever you want to call it.
Need to remove the lock of MState in ClearBuffers: https://github.com/EQEmu/Server/blob/master/common/tcp_connection.cpp#L504
So far no issues in my testing, but its hard to test all disconnect paths manually so gotta let it run.