| 71 | } |
| 72 | |
| 73 | std::unique_ptr<IMemoryPool> PoolManager::release_pool() |
| 74 | { |
| 75 | arm_compute::lock_guard<arm_compute::Mutex> lock(_mtx); |
| 76 | ARM_COMPUTE_ERROR_ON_MSG(!_occupied_pools.empty(), "All pools should be free in order to release one!"); |
| 77 | |
| 78 | if (!_free_pools.empty()) |
| 79 | { |
| 80 | std::unique_ptr<IMemoryPool> pool = std::move(_free_pools.front()); |
| 81 | ARM_COMPUTE_ERROR_ON(_free_pools.front() != nullptr); |
| 82 | _free_pools.pop_front(); |
| 83 | |
| 84 | // Update semaphore |
| 85 | _sem = std::make_unique<arm_compute::Semaphore>(_free_pools.size()); |
| 86 | |
| 87 | return pool; |
| 88 | } |
| 89 | |
| 90 | return nullptr; |
| 91 | } |
| 92 | |
| 93 | void PoolManager::clear_pools() |
| 94 | { |