Author: marshall
Date: Tue Mar 25 21:45:04 2014
New Revision: 204778

URL: http://llvm.org/viewvc/llvm-project?rev=204778&view=rev
Log:
Implement LWG issue #2135. If something goes wrong in condition_variable::wait, 
call terminate() rather than throwing an error. Do this indirectly, by marking 
the call as 'noexcept'. This is better than just calling terminate() directly, 
because it gives a better error message on the console.

Modified:
    libcxx/trunk/include/__mutex_base
    libcxx/trunk/src/condition_variable.cpp
    libcxx/trunk/www/cxx1y_status.html

Modified: libcxx/trunk/include/__mutex_base
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__mutex_base?rev=204778&r1=204777&r2=204778&view=diff
==============================================================================
--- libcxx/trunk/include/__mutex_base (original)
+++ libcxx/trunk/include/__mutex_base Tue Mar 25 21:45:04 2014
@@ -282,7 +282,7 @@ public:
     void notify_one() _NOEXCEPT;
     void notify_all() _NOEXCEPT;
 
-    void wait(unique_lock<mutex>& __lk);
+    void wait(unique_lock<mutex>& __lk) _NOEXCEPT;
     template <class _Predicate>
         void wait(unique_lock<mutex>& __lk, _Predicate __pred);
 
@@ -313,7 +313,7 @@ public:
 
 private:
     void __do_timed_wait(unique_lock<mutex>& __lk,
-                 chrono::time_point<chrono::system_clock, 
chrono::nanoseconds>);
+       chrono::time_point<chrono::system_clock, chrono::nanoseconds>) 
_NOEXCEPT;
 };
 
 template <class _To, class _Rep, class _Period>

Modified: libcxx/trunk/src/condition_variable.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/condition_variable.cpp?rev=204778&r1=204777&r2=204778&view=diff
==============================================================================
--- libcxx/trunk/src/condition_variable.cpp (original)
+++ libcxx/trunk/src/condition_variable.cpp Tue Mar 25 21:45:04 2014
@@ -32,7 +32,7 @@ condition_variable::notify_all() _NOEXCE
 }
 
 void
-condition_variable::wait(unique_lock<mutex>& lk)
+condition_variable::wait(unique_lock<mutex>& lk) _NOEXCEPT
 {
     if (!lk.owns_lock())
         __throw_system_error(EPERM,
@@ -44,7 +44,7 @@ condition_variable::wait(unique_lock<mut
 
 void
 condition_variable::__do_timed_wait(unique_lock<mutex>& lk,
-               chrono::time_point<chrono::system_clock, chrono::nanoseconds> 
tp)
+     chrono::time_point<chrono::system_clock, chrono::nanoseconds> tp) 
_NOEXCEPT
 {
     using namespace chrono;
     if (!lk.owns_lock())

Modified: libcxx/trunk/www/cxx1y_status.html
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1y_status.html?rev=204778&r1=204777&r2=204778&view=diff
==============================================================================
--- libcxx/trunk/www/cxx1y_status.html (original)
+++ libcxx/trunk/www/cxx1y_status.html Tue Mar 25 21:45:04 2014
@@ -212,7 +212,7 @@
        <tr><td><a 
href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2300";>2300</a></td><td>Redundant
 sections for map and multimap members should be 
removed</td><td>Chicago</td><td>Complete</td></tr>
        <tr><td>NB comment: GB9</td>                                            
                         <td>Remove gets from 
C++14</td><td>Chicago</td><td>Complete</td></tr>
     <tr><td></td><td></td><td></td><td></td></tr>
-       <tr><td><a 
href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2135";>2135</a></td><td>Unclear
 requirement for exceptions thrown in 
condition_variable::wait()</td><td>Issaquah</td><td></td></tr>
+       <tr><td><a 
href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2135";>2135</a></td><td>Unclear
 requirement for exceptions thrown in 
condition_variable::wait()</td><td>Issaquah</td><td>Complete</td></tr>
        <tr><td><a 
href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2291";>2291</a></td><td>std::hash
 is vulnerable to collision DoS 
attack</td><td>Issaquah</td><td>Complete</td></tr>
        <tr><td><a 
href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2142";>2142</a></td><td>packaged_task::operator()
 synchronization too broad?</td><td>Issaquah</td><td>Complete</td></tr>
        <tr><td><a 
href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2240";>2240</a></td><td>Probable
 misuse of term "function scope" in 
[thread.condition]</td><td>Issaquah</td><td>Complete</td></tr>


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to