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.
Summary
This PR fixes the bug reported in #534: when using a Rosbridge server, there is a race condition that may cause Publisher components (used, for example, in the Publish panel and the -currently unmerged- Teleop panel) to get an undefined
rosClient
, which causes a panel crash when a message is published. Current workaround is to force a rerender of the Publisher component by changing any of its props (for example, the published topic) as specified in #534 (comment).This PR fixes the bug by adding a new array of pending publishers. If the
setPublishers
method of RosbridgePlayer is called beforerosClient
is set, the publishers are instead buffered on the new array. Anypublish()
calls are rejected gracefully. When theconnect
hook is eventually called androsClient
gets a value, the most recent set of pending publishers is sent tosetPublishers
.Test plan
This change was tested using the Publish and Teleop panels (which instantiate a Publisher component) and a Rosbridge Websocket server. The test case detailed in #534 (comment) no longer fails.
Versioning impact
This PR is a patch revision.