namespace caspar {
-template <class N, class Func>
-void repeat_n(N times_to_repeat_block, const Func& func)
-{
- for (N i = 0; i < times_to_repeat_block; ++i)
- {
- func();
- }
-}
-
/**
* Counting semaphore modelled after java.util.concurrent.Semaphore
*/
permits_ += permits;
perform_callback_based_acquire();
- repeat_n(permits, [this] { permits_available_.notify_one(); });
+ permits_available_.notify_all();
}
/**
{
boost::unique_lock<boost::mutex> lock(mutex_);
- callbacks_per_requested_permits_[permits].push(std::move(acquired_callback));
+ if (permits_ >= permits)
+ {
+ permits_ -= permits;
+ lock.unlock();
+ acquired_callback();
+ }
+ else
+ callbacks_per_requested_permits_[permits].push(std::move(acquired_callback));
}
/**