{
auto res = SemAcquisitionImplPtr(new kernel::activity::SemAcquisitionImpl(issuer, this), true);
- if (value_ <= 0) {
- /* No free token in the semaphore; register the acquisition */
- ongoing_acquisitions_.push_back(res);
- } else {
+ if (value_ > 0) {
value_--;
res->granted_ = true;
+ } else {
+ /* No free token in the semaphore; register the acquisition */
+ ongoing_acquisitions_.push_back(res);
}
return res;
}
// auxiliary function to get dims from index
auto index_to_dims = [&dimensions](unsigned long index) {
std::vector<unsigned long> dims_array(dimensions.size());
- for (auto i = static_cast<int>(dimensions.size() - 1); i >= 0; --i) {
- if (index <= 0) {
- break;
- }
+ for (auto i = static_cast<int>(dimensions.size() - 1); i >= 0 && index > 0; --i) {
unsigned long value = index % dimensions[i];
dims_array[i] = value;
index = (index / dimensions[i]);