[client] overlay/msg: fix race condition in render #1162
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If an overlay is closed with
overlayMsg_close
, the message can be freed while it is still being used bymsg_render
, resulting in a segfault. Lock the message list for the duration ofmsg_render
to fix this.A semi-reliable way to reproduce this is to put a 20ms sleep after the call to
ll_peek_head
inmsg_render
. Use remote desktop to stop the Looking Glass host service, then start the client. The 'host not running' message should appear. Now start the host service. The client will now probably crash somewhere insidemsg_render
because the message it is rendering has been freed byoverlayMsg_close
.Not sure this is the cleanest approach, but I've taken after the precedence of
ll_forEachNL
by adding some morenl
methods. Perhaps it would be better to add a new lock inmsg.c
.