Join an empty world with an avatar. Kill the viewer process e.g. using the task manager. Then, join the world again with the same avatar. Perform some operations in the world, like: walk around, move objects, create/delete prims, sit down/get up.
After a while, the server will disconnect the new avatar from the world, and outputs the following in the log:
11:34:36 - [CLIENT]: unhandled TransferAbort packet
11:34:39 - [CLIENT]: Removed client with code 547664516, new client count 1
11:34:39 - [CLIENT]: Close has been called
11:34:39 - [LOGOUT]: j13 j13 from 1099511628032000(139,6756,134,4823,24,12581)
11:34:39 - [CAPS]: Removing CAPS handler for root agent 0ae5600b-223d-48c7-b6b6-
b915f4e1359c in realXtend Test
11:34:39 - [GROUP]: Removing all reference to groups for j13 j13
11:34:39 - [FRIEND]: Removing 0ae5600b-223d-48c7-b6b6-b915f4e1359c. Agent logged
out.
11:34:39 - [VOICECHAT]: Removing client
11:34:39 - [VOICECHAT]: Connection has been already closed
The simulation will freeze on the client.
Reproducibility: 10/10
Expected: The server will correctly disconnect the old user that forcibly exited the world and the new user remains connected.
Also, it seems that as soon as the client forcibly quits, the [VOICECHAT] system correctly identifies the user connection breaking down, but the simulation system does not.
Voicechat uses tcp so it's easier to detect connection breaking down there than in simulation system that uses udp.
I think CheckClientConnectivity method in ClientView does remove connection after a while, problem is that simulator somehow does not handle new connection
correctly if last connection did have enough time to quit.