diff options
authorRoger Planas <>2018-10-12 10:29:17 (GMT)
committerRoger Planas <>2018-10-12 11:34:44 (GMT)
commit0f4a77303fedfaa57977d6ca528799305eac9367 (patch)
parent66b60e9ac2ef9c12d22dcc31201e22e6eeb4804d (diff)
Fix Component's disconnect to run event loop while isActive
The Component::disconnect() was controlling the running of the event loop with the isAvailable flag, but it turns out that depending on timing, a re-connect could be attempted and the component erroneously claim that the "Component is already connecting or connected", which could not possibly the case if the first attempt to connect the component failed (hence, not possible it was connected). By updating the event loop to use the correct isActive flag, this issue is fixed. This error was highlighted as a result of the previous commit "Prevent connect on active sluift clients and components". Also, the getNextEvent is fixed to do not suffer from the same problem, and use isActive instead of isAvailable. Test-information: Before the patch, a test that would attempt a second component connect after a failed one would randomly fail. After the patch, a test that would attempt a second component connect after a failed one has passed hundreds of time without failure. Change-Id: I20be6b1c8aec485ded3330c143dedd2161c4c66e
1 files changed, 3 insertions, 3 deletions
diff --git a/Sluift/SluiftComponent.cpp b/Sluift/SluiftComponent.cpp
index 126562e..ee09380 100644
--- a/Sluift/SluiftComponent.cpp
+++ b/Sluift/SluiftComponent.cpp
@@ -78,7 +78,7 @@ bool SluiftComponent::isConnected() const {
void SluiftComponent::disconnect() {
- while (component->isAvailable()) {
+ while (component->isActive()) {
@@ -105,12 +105,12 @@ boost::optional<SluiftComponent::Event> SluiftComponent::getNextEvent(
// Wait for new events
- while (!watchdog.getTimedOut() && currentIndex >= pendingEvents.size() && component->isAvailable()) {
+ while (!watchdog.getTimedOut() && currentIndex >= pendingEvents.size() && component->isActive()) {
// Finish if we're disconnected or timed out
- if (watchdog.getTimedOut() || !component->isAvailable()) {
+ if (watchdog.getTimedOut() || !component->isActive()) {
return boost::optional<Event>();