diff --git a/stl/inc/condition_variable b/stl/inc/condition_variable index e4304da8d1a..e5b917a87c0 100644 --- a/stl/inc/condition_variable +++ b/stl/inc/condition_variable @@ -224,16 +224,8 @@ public: // but unfortunately our ABI speaks struct xtime, which is relative to the system clock. _CSTD xtime _Tgt; (void) _To_xtime_10_day_clamped(_Tgt, _Rel_time); - const int _Res = _Cnd_timedwait(_Mycnd(), _Myptr->_Mymtx(), &_Tgt); + (void) _Cnd_timedwait(_Mycnd(), _Myptr->_Mymtx(), &_Tgt); _Guard_unlocks_before_locking_outer.unlock(); - - switch (_Res) { - case _Thrd_timedout: - case _Thrd_success: - break; - default: - _Throw_C_error(_Res); - } } // relock return _Pred(); @@ -262,13 +254,10 @@ private: const int _Res = _Cnd_timedwait(_Mycnd(), _Ptr->_Mymtx(), _Abs_time); _Guard.unlock(); - switch (_Res) { - case _Thrd_success: + if (_Res == _Thrd_success) { return cv_status::no_timeout; - case _Thrd_timedout: + } else { return cv_status::timeout; - default: - _Throw_C_error(_Res); } } }; diff --git a/stl/inc/mutex b/stl/inc/mutex index 46a75447559..393d9dff2c5 100644 --- a/stl/inc/mutex +++ b/stl/inc/mutex @@ -746,13 +746,11 @@ public: // Nothing to do to comply with LWG-2135 because std::mutex lock/unlock are nothrow const int _Res = _Cnd_timedwait(_Mycnd(), _Lck.mutex()->_Mymtx(), _Abs_time); - switch (_Res) { - case _Thrd_success: + + if (_Res == _Thrd_success) { return cv_status::no_timeout; - case _Thrd_timedout: + } else { return cv_status::timeout; - default: - _Throw_C_error(_Res); } } diff --git a/stl/inc/thread b/stl/inc/thread index 70cd8fb6e6c..18f862c5ff3 100644 --- a/stl/inc/thread +++ b/stl/inc/thread @@ -137,7 +137,10 @@ public: _Throw_Cpp_error(_INVALID_ARGUMENT); } - _Check_C_return(_Thrd_detach(_Thr)); + if (_Thrd_detach(_Thr) != _Thrd_success) { + _Throw_Cpp_error(_INVALID_ARGUMENT); + } + _Thr = {}; } diff --git a/stl/inc/xthreads.h b/stl/inc/xthreads.h index 81576850978..83c04c3fb50 100644 --- a/stl/inc/xthreads.h +++ b/stl/inc/xthreads.h @@ -129,16 +129,7 @@ enum { // constants for error codes _RESOURCE_UNAVAILABLE_TRY_AGAIN }; -extern "C++" [[noreturn]] _CRTIMP2_PURE void __cdecl _Throw_C_error(int _Code); extern "C++" [[noreturn]] _CRTIMP2_PURE void __cdecl _Throw_Cpp_error(int _Code); - -inline int _Check_C_return(int _Res) { // throw exception on failure - if (_Res != _Thrd_success) { - _Throw_C_error(_Res); - } - - return _Res; -} _STD_END #pragma pop_macro("new") _STL_RESTORE_CLANG_WARNINGS diff --git a/stl/inc/xtimec.h b/stl/inc/xtimec.h index 64741469db9..12419359719 100644 --- a/stl/inc/xtimec.h +++ b/stl/inc/xtimec.h @@ -27,7 +27,6 @@ struct xtime { // store time with nanosecond resolution _CRTIMP2_PURE int __cdecl xtime_get(xtime*, int); -_CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis(const xtime*); _CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis2(const xtime*, const xtime*); _CRTIMP2_PURE long long __cdecl _Xtime_get_ticks(); diff --git a/stl/src/thread0.cpp b/stl/src/thread0.cpp index bffe7faf63b..d3c8bbecf05 100644 --- a/stl/src/thread0.cpp +++ b/stl/src/thread0.cpp @@ -35,6 +35,7 @@ static constexpr errc codes[] = { _THROW(system_error(static_cast(codes[code]), _STD generic_category(), msgs[code])); } +// TRANSITION, ABI: preserved for binary compatibility [[noreturn]] _CRTIMP2_PURE void __cdecl _Throw_C_error(int code) { // throw error object for C error switch (code) { // select the exception case _Thrd_nomem: diff --git a/stl/src/xtime.cpp b/stl/src/xtime.cpp index 1f7109b76f1..cc1c5c5c111 100644 --- a/stl/src/xtime.cpp +++ b/stl/src/xtime.cpp @@ -65,6 +65,7 @@ _CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis2(const xtime* xt1, const xtime* return static_cast(diff.sec * _Msec_per_sec + (diff.nsec + _Nsec_per_msec - 1) / _Nsec_per_msec); } +// TRANSITION, ABI: preserved for binary compatibility _CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis(const xtime* xt) { // convert time to milliseconds xtime now; xtime_get(&now, TIME_UTC);