|
54 | 54 | typedef ::timespec __libcpp_timespec_t; |
55 | 55 | #endif // !defined(_LIBCPP_HAS_NO_THREADS) |
56 | 56 |
|
57 | | -_LIBCPP_PUSH_MACROS |
58 | | -#include <__undef_macros> |
59 | | - |
60 | 57 | _LIBCPP_BEGIN_NAMESPACE_STD |
61 | 58 |
|
62 | 59 | #if !defined(_LIBCPP_HAS_NO_THREADS) |
@@ -252,53 +249,9 @@ int __libcpp_tls_set(__libcpp_tls_key __key, void *__p); |
252 | 249 |
|
253 | 250 | #endif // !defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) |
254 | 251 |
|
255 | | -struct __libcpp_timed_backoff_policy { |
256 | | - _LIBCPP_INLINE_VISIBILITY |
257 | | - bool operator()(chrono::nanoseconds __elapsed) const |
258 | | - { |
259 | | - if(__elapsed > chrono::milliseconds(128)) |
260 | | - __libcpp_thread_sleep_for(chrono::milliseconds(8)); |
261 | | - else if(__elapsed > chrono::microseconds(64)) |
262 | | - __libcpp_thread_sleep_for(__elapsed / 2); |
263 | | - else if(__elapsed > chrono::microseconds(4)) |
264 | | - __libcpp_thread_yield(); |
265 | | - else |
266 | | - {} // poll |
267 | | - return false; |
268 | | - } |
269 | | -}; |
270 | | - |
271 | 252 | #if (!defined(_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL) || \ |
272 | 253 | defined(_LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL)) |
273 | 254 |
|
274 | | - |
275 | | -namespace __thread_detail { |
276 | | - |
277 | | -_LIBCPP_HIDE_FROM_ABI inline |
278 | | -__libcpp_timespec_t __convert_to_timespec(const chrono::nanoseconds& __ns) |
279 | | -{ |
280 | | - using namespace chrono; |
281 | | - seconds __s = duration_cast<seconds>(__ns); |
282 | | - __libcpp_timespec_t __ts; |
283 | | - typedef decltype(__ts.tv_sec) __ts_sec; |
284 | | - const __ts_sec __ts_sec_max = numeric_limits<__ts_sec>::max(); |
285 | | - |
286 | | - if (__s.count() < __ts_sec_max) |
287 | | - { |
288 | | - __ts.tv_sec = static_cast<__ts_sec>(__s.count()); |
289 | | - __ts.tv_nsec = static_cast<decltype(__ts.tv_nsec)>((__ns - __s).count()); |
290 | | - } |
291 | | - else |
292 | | - { |
293 | | - __ts.tv_sec = __ts_sec_max; |
294 | | - __ts.tv_nsec = 999999999; // (10^9 - 1) |
295 | | - } |
296 | | - |
297 | | - return __ts; |
298 | | -} |
299 | | - |
300 | | -} // namespace __thread_detail |
301 | | - |
302 | 255 | #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) |
303 | 256 |
|
304 | 257 | _LIBCPP_HIDE_FROM_ABI inline |
@@ -479,7 +432,7 @@ void __libcpp_thread_yield() |
479 | 432 | _LIBCPP_HIDE_FROM_ABI inline |
480 | 433 | void __libcpp_thread_sleep_for(const chrono::nanoseconds& __ns) |
481 | 434 | { |
482 | | - __libcpp_timespec_t __ts = __thread_detail::__convert_to_timespec(__ns); |
| 435 | + __libcpp_timespec_t __ts = _VSTD::__convert_to_timespec<__libcpp_timespec_t>(__ns); |
483 | 436 | while (nanosleep(&__ts, &__ts) == -1 && errno == EINTR); |
484 | 437 | } |
485 | 438 |
|
@@ -664,7 +617,7 @@ void __libcpp_thread_yield() |
664 | 617 | _LIBCPP_HIDE_FROM_ABI inline |
665 | 618 | void __libcpp_thread_sleep_for(const chrono::nanoseconds& __ns) |
666 | 619 | { |
667 | | - __libcpp_timespec_t __ts = __thread_detail::__convert_to_timespec(__ns); |
| 620 | + __libcpp_timespec_t __ts = _VSTD::__convert_to_timespec<__libcpp_timespec_t>(__ns); |
668 | 621 | thrd_sleep(&__ts, nullptr); |
669 | 622 | } |
670 | 623 |
|
@@ -776,6 +729,4 @@ get_id() _NOEXCEPT |
776 | 729 |
|
777 | 730 | _LIBCPP_END_NAMESPACE_STD |
778 | 731 |
|
779 | | -_LIBCPP_POP_MACROS |
780 | | - |
781 | 732 | #endif // _LIBCPP_THREADING_SUPPORT |
0 commit comments