<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">You should be able to report a bug here: <a href="https://developer.apple.com/bug-reporting/" class="">https://developer.apple.com/bug-reporting/</a>. We'll link it with the bug report I already created internally.<div class=""><br class=""></div><div class="">Note that the LLVM bugzilla is not the right place for this, since I think it is most likely a problem pertaining to Apple platforms, and not to a project under the LLVM umbrella (although that remains to be confirmed).</div><div class=""><br class=""></div><div class="">Louis<br class=""><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On May 23, 2019, at 11:43, b <<a href="mailto:b-spam@intraversal.de" class="">b-spam@intraversal.de</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Thank you for the update. Is there some place where this issue can be tracked? Should I file it as a bug with the LLVM bugzilla?<div class=""><br class=""></div><div class="">Benjamin<br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">Am 21.05.2019 um 20:12 schrieb Louis Dionne <<a href="mailto:ldionne@apple.com" class="">ldionne@apple.com</a>>:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On May 14, 2019, at 17:57, Louis Dionne via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" class="">libcxx-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class="Apple-interchange-newline"><br class=""><blockquote type="cite" class=""><div class="">On May 14, 2019, at 11:49, b via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" class="">libcxx-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><span class="" style="font-size: 14px;">Hello everyone,</span><div class="" style="font-size: 14px;"><br class=""></div><div class="" style="font-size: 14px;">I am new to this list. I am writing because I think I might have caught a bug in libc++. What I hope to get is a quick assessment of my issue so that I know if I should file this as a bug or some hints in how I should proceed to gather more information or even rectify the issue on my end.</div><div class="" style="font-size: 14px;"><br class=""></div><div class="" style="font-size: 14px;">The issue I am seeing popped up in a macOS project (Xcode 10.2.1) I am working on but I was able to condense it into a very small test program, see below for the code.</div><div class="" style="font-size: 14px;"><br class=""></div><div class=""><span class="" style="font-size: 14px;">The issue presents itself as a crash in shared_future::wait_for due to an uncatchable exception. The crash does not occur immediately but only after a (huge) number of calls. Console output in Xcode reads  "libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: condition_variable timed_wait failed: Invalid argument“. See backtrace further down for details. Unfortunately I cannot step into code of the method where the exception originates which is condition_variable::__do_timed_wait. I browsed the code in the libcxx repository and found that the error must be the result code EINVAL from a call to pthread_cond_timedwait.</span></div><div class="" style="font-size: 14px;"><br class=""></div><div class="" style="font-size: 14px;">The interesting bit is that the issue can be reproduced in each test run within (mostly) less than 10 minutes on an iMac18,3/i7 and on a MacBookPro15,1/i7 but never on a MacBookPro15,2/i5. I only have one machine of each of those available so I cannot be sure how these results hold up.</div><div class="" style="font-size: 14px;"><br class=""></div><div class="" style="font-size: 14px;">1. Is there something fundamentally wrong with my code, i.e. how I use the shared_future?</div><div class="" style="font-size: 14px;"><br class=""></div><div class="" style="font-size: 14px;">2. Is this likely to be a bug in libc++ or is it more likely to be an issue with the BSD level API and/or the hardware? In case of the latter option where should I seek contact?</div><div class="" style="font-size: 14px;"><br class=""></div><div class="" style="font-size: 14px;">3. I would like to be able to step into the code for condition_variable::__do_timed_wait and get the debugger info for the local variables. Would this be simply a matter of pulling the libcxx repository, building and linking it? I am not a command line compilation guy so I was hoping for some good documentation on how to do this with and for Xcode. However, if must be, I am willing to accept my fate.</div></div></div></blockquote><div class=""><br class=""></div>In order to do that with 100% reproduceability, you'd have to build libc++ exactly the same way it was built for the platform you're running on, which is not easily achievable at the moment. I'll take a look.</div><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">I'll try running this program overnight to reproduce:<div class=""><div class=""><br class=""></div><div class=""><font face="Monaco" class="">   cat <<EOF | clang++ -xc++ - -std=c++17 && ./a.out</font></div><div class=""><font face="Monaco" class="">   #include <future></font></div><div class=""><font face="Monaco" class="">   #include <thread></font></div><div class=""><font face="Monaco" class=""><br class=""></font></div><div class=""><font face="Monaco" class="">   using namespace std;</font></div><div class=""><font face="Monaco" class=""><br class=""></font></div><div class=""><font face="Monaco" class="">   int main(int argc, const char * argv[]) {</font></div><div class=""><font face="Monaco" class="">      promise<void> thePromise = promise<void> {};</font></div><div class=""><font face="Monaco" class="">      shared_future<void> sharedFuture = thePromise.get_future().share();</font></div><div class=""><font face="Monaco" class=""><br class=""></font></div><div class=""><font face="Monaco" class="">      thread anotherThread = thread( [sharedFuture]</font></div><div class=""><font face="Monaco" class="">      {</font></div><div class=""><font face="Monaco" class="">         int debugCount = 0;</font></div><div class=""><font face="Monaco" class="">         while (sharedFuture.wait_for(100ns) == future_status::timeout)</font></div><div class=""><font face="Monaco" class="">         {</font></div><div class=""><font face="Monaco" class="">            debugCount++;</font></div><div class=""><font face="Monaco" class="">         }</font></div><div class=""><font face="Monaco" class="">      });</font></div><div class=""><font face="Monaco" class=""><br class=""></font></div><div class=""><font face="Monaco" class="">      sharedFuture.wait();</font></div><div class=""><font face="Monaco" class=""><br class=""></font></div><div class=""><font face="Monaco" class="">      return 0;</font></div><div class=""><font face="Monaco" class="">   }</font></div><div class=""><font face="Monaco" class="">   EOF</font></div><div class=""><br class=""></div><div class="">However, it would be useful for me to know the OSes you've been able to reproduce it on.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Louis</div></div></div></div></blockquote><br class=""></div><div class="">Just to follow up on this, I managed to reproduce without libc++ concurrency primitives (but still using std::chrono), and I've followed up with our OS folks to help me figure out what's going on. I just wanted to let you know I've acknowledged the problem and we're working on it -- I don't think it's just a misusage of the facilities.</div><div class=""><br class=""></div><div class="">Louis</div><div class=""><br class=""></div></div></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></div></body></html>