Clamp float numbers before conversion to integers.
This commit is contained in:
parent
fbc7e5a7f8
commit
4df03c8491
@ -19,6 +19,7 @@
|
|||||||
#include "td/utils/format.h"
|
#include "td/utils/format.h"
|
||||||
#include "td/utils/Gzip.h"
|
#include "td/utils/Gzip.h"
|
||||||
#include "td/utils/logging.h"
|
#include "td/utils/logging.h"
|
||||||
|
#include "td/utils/misc.h"
|
||||||
#include "td/utils/Random.h"
|
#include "td/utils/Random.h"
|
||||||
#include "td/utils/ScopeGuard.h"
|
#include "td/utils/ScopeGuard.h"
|
||||||
#include "td/utils/Time.h"
|
#include "td/utils/Time.h"
|
||||||
@ -863,7 +864,7 @@ void SessionConnection::flush_packet() {
|
|||||||
max_after = HTTP_MAX_AFTER;
|
max_after = HTTP_MAX_AFTER;
|
||||||
auto time_to_disconnect =
|
auto time_to_disconnect =
|
||||||
min(ping_disconnect_delay() + last_pong_at_, read_disconnect_delay() + last_read_at_) - Time::now_cached();
|
min(ping_disconnect_delay() + last_pong_at_, read_disconnect_delay() + last_read_at_) - Time::now_cached();
|
||||||
max_wait = min(http_max_wait(), static_cast<int>(1000 * max(0.1, time_to_disconnect - rtt())));
|
max_wait = static_cast<int>(1000 * clamp(time_to_disconnect - rtt(), 0.1, http_max_wait()));
|
||||||
} else if (mode_ == Mode::Http) {
|
} else if (mode_ == Mode::Http) {
|
||||||
max_delay = HTTP_MAX_DELAY;
|
max_delay = HTTP_MAX_DELAY;
|
||||||
max_after = HTTP_MAX_AFTER;
|
max_after = HTTP_MAX_AFTER;
|
||||||
|
@ -151,8 +151,8 @@ class SessionConnection
|
|||||||
return online_flag_ ? rtt() : 60;
|
return online_flag_ ? rtt() : 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
int http_max_wait() const {
|
double http_max_wait() const {
|
||||||
return 25 * 1000; // 25s. Longer could be closed by proxy
|
return 25.0; // 25s. Longer could be closed by proxy
|
||||||
}
|
}
|
||||||
static constexpr int HTTP_MAX_AFTER = 10; // 0.01s
|
static constexpr int HTTP_MAX_AFTER = 10; // 0.01s
|
||||||
static constexpr int HTTP_MAX_DELAY = 30; // 0.03s
|
static constexpr int HTTP_MAX_DELAY = 30; // 0.03s
|
||||||
|
@ -277,7 +277,7 @@ class TdReceiver {
|
|||||||
if (is_locked) {
|
if (is_locked) {
|
||||||
LOG(FATAL) << "Receive is called after Client destroy, or simultaneously from different threads";
|
LOG(FATAL) << "Receive is called after Client destroy, or simultaneously from different threads";
|
||||||
}
|
}
|
||||||
auto response = receive_unlocked(timeout);
|
auto response = receive_unlocked(clamp(timeout, 0.0, 1000000.0));
|
||||||
is_locked = receive_lock_.exchange(false);
|
is_locked = receive_lock_.exchange(false);
|
||||||
CHECK(is_locked);
|
CHECK(is_locked);
|
||||||
VLOG(td_requests) << "End to wait for updates, returning object " << response.request_id << ' '
|
VLOG(td_requests) << "End to wait for updates, returning object " << response.request_id << ' '
|
||||||
|
@ -845,7 +845,8 @@ int32 NotificationManager::get_notification_delay_ms(DialogId dialog_id, const P
|
|||||||
return 0;
|
return 0;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
auto passed_time_ms = max(0, static_cast<int32>((G()->server_time_cached() - notification.date - 1) * 1000));
|
auto passed_time_ms =
|
||||||
|
static_cast<int32>(clamp(G()->server_time_cached() - notification.date - 1, 0.0, 1000000.0) * 1000);
|
||||||
return max(max(min_delay_ms, delay_ms) - passed_time_ms, MIN_NOTIFICATION_DELAY_MS);
|
return max(max(min_delay_ms, delay_ms) - passed_time_ms, MIN_NOTIFICATION_DELAY_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "td/utils/format.h"
|
#include "td/utils/format.h"
|
||||||
#include "td/utils/List.h"
|
#include "td/utils/List.h"
|
||||||
#include "td/utils/logging.h"
|
#include "td/utils/logging.h"
|
||||||
|
#include "td/utils/misc.h"
|
||||||
#include "td/utils/ObjectPool.h"
|
#include "td/utils/ObjectPool.h"
|
||||||
#include "td/utils/port/thread_local.h"
|
#include "td/utils/port/thread_local.h"
|
||||||
#include "td/utils/ScopeGuard.h"
|
#include "td/utils/ScopeGuard.h"
|
||||||
@ -428,7 +429,7 @@ void Scheduler::set_actor_timeout_at(ActorInfo *actor_info, double timeout_at) {
|
|||||||
|
|
||||||
void Scheduler::run_poll(Timestamp timeout) {
|
void Scheduler::run_poll(Timestamp timeout) {
|
||||||
// we can't wait for less than 1ms
|
// we can't wait for less than 1ms
|
||||||
int timeout_ms = static_cast<int32>(td::max(timeout.in(), 0.0) * 1000 + 1);
|
int timeout_ms = static_cast<int32>(clamp(timeout.in(), 0.0, 1000000.0) * 1000 + 1);
|
||||||
#if TD_PORT_WINDOWS
|
#if TD_PORT_WINDOWS
|
||||||
CHECK(inbound_queue_);
|
CHECK(inbound_queue_);
|
||||||
inbound_queue_->reader_get_event_fd().wait(timeout_ms);
|
inbound_queue_->reader_get_event_fd().wait(timeout_ms);
|
||||||
|
@ -53,7 +53,7 @@ auto skip_eintr_timeout(F &&f, int32 timeout_ms) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
left_timeout_ms =
|
left_timeout_ms =
|
||||||
td::max(static_cast<int32>((start.at() - Timestamp::now().at()) * 1000 + timeout_ms + 1 - 1e-9), 0);
|
static_cast<int32>(td::max((start.at() - Timestamp::now().at()) * 1000 + timeout_ms + 1 - 1e-9, 0.0));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user