hydra-queue-runner: Fix segfault sorting machines by load
[?]
Jun 21, 2015, 2:21 PM
ODCBSLFGJGNOMKPZV6TS2SVTQMVUXR3K2BQJHNAJHTR4HECDBBNACDependencies
- [2]
UPZXMQDEFix machine selection - [3]
HUUZFPPKFix race between the queue monitor and the builder threads - [4]
NNOCZ4ROhydra-queue-runner: Improve dispatcher - [5]
OCZ4LSGGAutomatically retry aborted builds - [6]
5AIYUMTBBasic remote building - [*]
24BMQDZAStart of single-process hydra-queue-runner
Change contents
- replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 865
/* Bail out when there are no slots left. */std::vector<Machine::ptr> machinesSorted;/* Copy the currentJobs field of each machine. This isnecessary to ensure that the sort comparator below is aordering. std::sort() can segfault if it isn't. */struct MachineInfo{Machine::ptr machine;unsigned int currentJobs;};std::vector<MachineInfo> machinesSorted; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 876
machinesSorted.insert(machinesSorted.end(),machines_->begin(), machines_->end());for (auto & m : *machines_)machinesSorted.push_back({m, m->currentJobs}); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 892
[](const Machine::ptr & a, const Machine::ptr & b) -> bool[](const MachineInfo & a, const MachineInfo & b) -> bool - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 894
float ta = roundf(a->currentJobs / a->speedFactor);float tb = roundf(b->currentJobs / b->speedFactor);float ta = roundf(a.currentJobs / a.machine->speedFactor);float tb = roundf(b.currentJobs / b.machine->speedFactor); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 898
a->speedFactor != b->speedFactor ? a->speedFactor > b->speedFactor :a->currentJobs > b->currentJobs;a.machine->speedFactor != b.machine->speedFactor ? a.machine->speedFactor > b.machine->speedFactor :a.currentJobs > b.currentJobs; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 908
for (auto & machine : machinesSorted) {for (auto & mi : machinesSorted) { - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 910
if (machine->currentJobs >= machine->maxJobs) continue;if (mi.machine->currentJobs >= mi.machine->maxJobs) continue; - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 928
if (!machine->supportsStep(step)) {if (!mi.machine->supportsStep(step)) { - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 947
auto reservation = std::make_shared<MachineReservation>(machine);auto reservation = std::make_shared<MachineReservation>(mi.machine);