Do not use goto resume_0 due to some strange -O3 bug which leads to hangs (it seems it optimizes flush_queue.size() away)

This commit is contained in:
Vitaliy Filippov
2019-12-03 02:23:29 +03:00
parent fd13965b90
commit 1f7381e220
3 changed files with 6 additions and 9 deletions
+6 -4
View File
@@ -152,7 +152,6 @@ bool journal_flusher_co::loop()
goto resume_17;
else if (wait_state == 18)
goto resume_18;
resume_0:
if (!flusher->flush_queue.size() ||
!flusher->start_forced && !flusher->active_flushers && flusher->flush_queue.size() < flusher->sync_threshold)
{
@@ -179,7 +178,8 @@ resume_0:
// Another coroutine will see it and re-queue the object after it finishes
if (repeat_it->second < cur.version)
repeat_it->second = cur.version;
goto resume_0;
wait_state = 0;
return true;
}
else
flusher->sync_to_repeat[cur.oid] = 0;
@@ -278,7 +278,8 @@ resume_0:
flusher->unshift_flush({ .oid = cur.oid, .version = repeat_it->second });
}
flusher->sync_to_repeat.erase(repeat_it);
goto resume_0;
wait_state = 0;
return true;
}
// Find it in clean_db
{
@@ -476,7 +477,8 @@ resume_0:
flusher->unshift_flush({ .oid = cur.oid, .version = repeat_it->second });
}
flusher->sync_to_repeat.erase(repeat_it);
goto resume_0;
wait_state = 0;
return true;
}
return true;
}