1
0
Fork 0

revert commit for deterministic feature orders: breaks signal handlers!

This commit is contained in:
jsteemann 2017-05-05 00:12:44 +02:00
parent e79f9779b3
commit 400b64ac7c
1 changed files with 22 additions and 14 deletions

View File

@ -384,27 +384,35 @@ void ApplicationServer::setupDependencies(bool failOnMissing) {
// first insert all features, even the inactive ones
std::vector<ApplicationFeature*> features;
for (auto& it : _features) {
auto const& us = it.second;
auto insertPosition = features.end();
for (size_t i = features.size(); i > 0; --i) {
auto const& other = features[i - 1];
if (us->doesStartBefore(other->name())) {
// we start before the other feature. so move ourselves up
insertPosition = features.begin() + (i - 1);
} else if (other->doesStartBefore(us->name())) {
// the other feature starts before us. so stop moving up
break;
} else {
// no dependencies between the two features
if (us->name() < other->name()) {
if (!features.empty()) {
for (size_t i = features.size(); i > 0; --i) {
if (it.second->doesStartBefore(features[i - 1]->name())) {
insertPosition = features.begin() + (i - 1);
}
}
}
features.insert(insertPosition, it.second);
}
for (size_t i = 1; i < features.size(); ++i) {
auto feature = features[i];
size_t insert = i;
for (size_t j = i; j > 0; --j) {
if (features[j - 1]->doesStartBefore(feature->name())) {
break;
}
insert = j - 1;
}
if (insert != i) {
for (size_t j = i; j > insert; --j) {
features[j] = features[j - 1];
}
features[insert] = feature;
}
}
LOG_TOPIC(TRACE, Logger::STARTUP) << "ordered features:";
int position = 0;
@ -417,7 +425,7 @@ void ApplicationServer::setupDependencies(bool failOnMissing) {
}
LOG_TOPIC(TRACE, Logger::STARTUP)
<< "feature #" << ++position << ": " << feature->name()
<< (feature->isEnabled() ? "" : " (disabled)") << dependencies;
<< (feature->isEnabled() ? "" : " (disabled)") << " " << dependencies;
}
// remove all inactive features