Skip to content

Commit cafcfaa

Browse files
authored
[SDK] Fixes duration overflow (#3529)
1 parent 4ad3b8b commit cafcfaa

File tree

1 file changed

+12
-23
lines changed

1 file changed

+12
-23
lines changed

sdk/src/logs/multi_log_record_processor.cc

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -75,77 +75,66 @@ void MultiLogRecordProcessor::OnEmit(std::unique_ptr<Recordable> &&record) noexc
7575

7676
bool MultiLogRecordProcessor::ForceFlush(std::chrono::microseconds timeout) noexcept
7777
{
78-
// Convert to nanos to prevent overflow
79-
std::chrono::nanoseconds timeout_ns = std::chrono::nanoseconds::max();
80-
if (std::chrono::duration_cast<std::chrono::microseconds>(timeout_ns) > timeout)
81-
{
82-
timeout_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(timeout);
83-
}
8478
bool result = true;
8579
auto start_time = std::chrono::system_clock::now();
8680
auto overflow_checker = std::chrono::system_clock::time_point::max();
8781
std::chrono::system_clock::time_point expire_time;
88-
if (overflow_checker - start_time <= timeout_ns)
82+
if (std::chrono::duration_cast<std::chrono::microseconds>(overflow_checker - start_time) <=
83+
timeout)
8984
{
9085
expire_time = overflow_checker;
9186
}
9287
else
9388
{
9489
expire_time =
95-
start_time + std::chrono::duration_cast<std::chrono::system_clock::duration>(timeout_ns);
90+
start_time + std::chrono::duration_cast<std::chrono::system_clock::duration>(timeout);
9691
}
9792
for (auto &processor : processors_)
9893
{
99-
if (!processor->ForceFlush(std::chrono::duration_cast<std::chrono::microseconds>(timeout_ns)))
94+
if (!processor->ForceFlush(timeout))
10095
{
10196
result = false;
10297
}
10398
start_time = std::chrono::system_clock::now();
10499
if (expire_time > start_time)
105100
{
106-
timeout_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(expire_time - start_time);
101+
timeout = std::chrono::duration_cast<std::chrono::microseconds>(expire_time - start_time);
107102
}
108103
else
109104
{
110-
timeout_ns = std::chrono::nanoseconds::zero();
105+
timeout = std::chrono::microseconds::zero();
111106
}
112107
}
113108
return result;
114109
}
115110

116111
bool MultiLogRecordProcessor::Shutdown(std::chrono::microseconds timeout) noexcept
117112
{
118-
// Converto nanos to prevent overflow
119-
std::chrono::nanoseconds timeout_ns = std::chrono::nanoseconds::max();
120-
if (std::chrono::duration_cast<std::chrono::microseconds>(timeout_ns) > timeout)
121-
{
122-
timeout_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(timeout);
123-
}
124113
bool result = true;
125114
auto start_time = std::chrono::system_clock::now();
126115
auto overflow_checker = std::chrono::system_clock::time_point::max();
127116
std::chrono::system_clock::time_point expire_time;
128-
if (overflow_checker - start_time <= timeout_ns)
117+
if (std::chrono::duration_cast<std::chrono::microseconds>(overflow_checker - start_time) <=
118+
timeout)
129119
{
130120
expire_time = overflow_checker;
131121
}
132122
else
133123
{
134124
expire_time =
135-
start_time + std::chrono::duration_cast<std::chrono::system_clock::duration>(timeout_ns);
125+
start_time + std::chrono::duration_cast<std::chrono::system_clock::duration>(timeout);
136126
}
137127
for (auto &processor : processors_)
138128
{
139-
result |=
140-
processor->Shutdown(std::chrono::duration_cast<std::chrono::microseconds>(timeout_ns));
129+
result |= processor->Shutdown(timeout);
141130
start_time = std::chrono::system_clock::now();
142131
if (expire_time > start_time)
143132
{
144-
timeout_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(expire_time - start_time);
133+
timeout = std::chrono::duration_cast<std::chrono::microseconds>(expire_time - start_time);
145134
}
146135
else
147136
{
148-
timeout_ns = std::chrono::nanoseconds::zero();
137+
timeout = std::chrono::microseconds::zero();
149138
}
150139
}
151140
return result;

0 commit comments

Comments
 (0)