19 const unsigned max_delay_ms,
20 const unsigned reset_after_ms)
22 init_delay_ms_ = init_delay_ms;
23 max_delay_ms_ = max_delay_ms;
24 reset_after_ms_ = reset_after_ms;
25 prng_.InitLocaltime();
28 reinterpret_cast<pthread_mutex_t *
>(smalloc(
sizeof(pthread_mutex_t)));
29 int retval = pthread_mutex_init(lock_, NULL);
37 pthread_mutex_destroy(lock_);
43 pthread_mutex_lock(lock_);
46 pthread_mutex_unlock(lock_);
51 time_t now = time(NULL);
53 pthread_mutex_lock(lock_);
54 if (
unsigned(now - last_throttle_) < reset_after_ms_/1000) {
55 if (delay_range_ < max_delay_ms_) {
56 if (delay_range_ == 0)
57 delay_range_ = init_delay_ms_;
61 unsigned delay = prng_.Next(delay_range_) + 1;
62 if (delay > max_delay_ms_)
63 delay = max_delay_ms_;
65 pthread_mutex_unlock(lock_);
68 pthread_mutex_lock(lock_);
71 pthread_mutex_unlock(lock_);
void Init(const unsigned init_delay_ms, const unsigned max_delay_ms, const unsigned reset_after_ms)
assert((mem||(size==0))&&"Out Of Memory")
void SafeSleepMs(const unsigned ms)
CVMFS_EXPORT void LogCvmfs(const LogSource source, const int mask, const char *format,...)