Follow-up Comment #4, patch #3721 (project freeciv):
Not being thread safe isn't just about whether the client is multithreaded.
The entire computational system (client+server) has at least two threads, and
if I read unit_move() correctly, send_unit_info_to_onlookers() is called a few
times before the transported units are moved, so that there is a window during
which the client sees the transporting unit moved and the transported units
not yet moved, because the client thread (the single thread of the client
process) isn't waiting for the server to finish with unit_move_handling() to
do the next action. In practice, the situation described above would require
either extremely variable network latency or a vast disparity in computational
power between the client and the server, but this definitely conceivable with
a fast gaming PC running the client and a heavily-loaded public internet
server running on aging donated hardware in the lowest QoS band of some
oddly-connected data centre.
Note that in the situation above, although the units are on different tiles,
they still believe themselves to be transported, so by querying transport
status, the information collected can be expected to also be reliable once the
server has finished processing the move (and since the information that the
transport is no longer occupied is sent before the information that the unit
has moved, the opposite case (thinking a unit is in a transport when it has in
fact moved out) will never occur with the current code).
Reply to this item at:
Message sent via/by Gna!
Freeciv-dev mailing list