<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/146120>146120</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Real-time Sanitizer causes pthread_cond_signal to segfaul when a thread is doing a timed wait on a condition variable
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          adrew0809
      </td>
    </tr>
</table>

<pre>
    A simple std::condition_variable usage leads to segfault when building with clang 20, -fsanitizer=realtime.
Nothing is annotated as non-blocking.
```
#include <condition_variable>
#include <future>
#include <mutex>
#include <thread>

int main() {
  std::mutex mut;
  std::condition_variable cv;
  bool go{false};

  const auto fut = std::async(std::launch::async, [&] {
 std::this_thread::sleep_for(std::chrono::milliseconds(100));
    {
 std::unique_lock<std::mutex> lock(mut);
      go = true;
    }
 cv.notify_one();
  });

  std::unique_lock<std::mutex> lock(mut);
  // normal wait is fine
  // cv.wait(lock, [&] { return go; });
  // but timed wait segfaults
  cv.wait_for(lock, std::chrono::milliseconds(200), [&] { return go; });
}

```

```
(gdb) r
Starting program: /app/iplatform/rsan_bug_build/rsan_bug 
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7f05071ff640 (LWP 254606)]

Thread 2 "rsan_bug" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f05071ff640 (LWP 254606)]
0x00007f0507c85233 in pthread_cond_signal () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0 0x00007f0507c85233 in pthread_cond_signal () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x000058e1f2851b92 in main::$_0::operator()() const ()
```

If the condition_variable is not yet waited on, there is no segfault. If it is not a timed wait, there is no segfault.

[CMakeLists.txt](https://github.com/user-attachments/files/20952913/CMakeLists.txt)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VkmP4zYT_TX0pWCDoqzFBx_c7fZggPnmC9JZjgYlliRmKFLhYnfPrw8oyR73kmQSIIBhW6piba_eA7lzstWIW5LdkWy_4MF3xm65sHimJd0sKiOetztwsh8UgvOCpDuS7mqjhfTS6OOJW8krhRAcbxEUcuHAG3DYNjwoD-cONVRBKiF1C2fpO6gV1y0wStg9LBvHtfTyK1qS7i1y5WWPK0J3n43v4hHpgGttPPcogDvQRi8rZeovUrfRj-R0_tAdYanUtQoCgaT3b6sk6cMbryb4YN-19MHj03sG31nkYrbQndQeei41YSVhGyDFHaE7-DatMQ70wZP0leWdOdani1dljILWkOKu4cohKfaTZTTWRjsPPHgDTfBA0v23qNw965qw8vpC8aDr7oXxHiLkLCfZ_lLw1d130h0vPcYXTiEOx8bY26B1Z402c4dSKekwtuMIKxNKCdvEz9wKvMkRtPw94DHiSNL7l6Mi6QOMBlbGod2GAWjN2Ky3AW-j7-O_-rTSxsvm-Wg0TmhcfKLH5eklBv-qEsIOhB1AG9tzBWcufdzTRmq8NdenVTQRVk5BXg0dLPpgdcQ4vXtR4TVCFTxEQogpx4VVbtqBKfwMzCXF9wDEZoC-u6BpwK_Z9pp8ZSuqyABL6O7Rc-sjfwdrWst7ku5iU3wYCDvIQXHfGNsTdrCO62MV2uMoEjcvgNDdmVstdRsPP1hrLAjpeKViXC6ERefADbxGsFwL08uvPLIpuv9_QDs-gDYeBrS99B5FrDO7-2lcbhBYhbaNwYKL30pW09ofRQWoIx8FyWLnP4_2zjj_0knJynL7DIQxwg5KVoQdnsr8mK-XSurwtGx1mAzXMytnVglhbDWV8hnPMJdDn4qGZrRImiZfUyCs_PTrD8CydU7ziEQ2YzC7s5j1MizCGFisUZ5QQBR1ruDx44fHhw-_RJgfse1R-2kg4wrN6R_P0tejznrzj-qgT5RSOjnWZcbSFKSGYW4zLtpxLmOWxcaaHv5mSHUcTv5ilyo_yS-F_zpjmsCcIysxaViZJdWGxRyjuI88Imx9pNNfMy7YSL2RS2PKSZbnV2_Y8rEB3yG8o_rSjWv6jH4kOgowOuLmO7Sz9Ur-FXxsYBKceIbfCMSfHpnZmt3d_49_wU_SebfyTz5CycrO-8GNzUXNaaXvQrWqTSRncGiX3Hted3F_HGGHRiqMv4xuMrZJUsIOr4KyzUJsU7FJN3yB26TIErrOknW26LZNUfE6zTciL8tNIViKVYGiYEWWVZTxZiG3jLKM5qxICpat16u0pmtab_KsKThLspKsKfZcqpVSp35lbLuQzgXcJus8YXSheIXKjfcZxjSeYbRGemb7hd3GQ8sqtI6sqRoLvobx0ivc_ohcLeNA4fFyL4GaB4fu3U37dtOZLjocJqc4f2FGmbrVbxM9rvDDBf5FsGr7FyjEGuef5WDNb1j7KKKxs4jE3Pppy_4IAAD__6yQB1g">