<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/499e443fb6338fbdd22fdf58269607d1b20620f5">https://github.com/macports/macports-legacy-support/commit/499e443fb6338fbdd22fdf58269607d1b20620f5</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 499e443fb6338fbdd22fdf58269607d1b20620f5
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Tue May 27 17:07:50 2025 -0700

<span style='display:block; white-space:pre;color:#404040;'>    time.c: Initialize sleep offset at program startup.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Gives plausible no-sleep results on all platforms.  Sleeps aren't
</span><span style='display:block; white-space:pre;color:#404040;'>    available in VMs, limiting the test cases for actual sleeps.
</span><span style='display:block; white-space:pre;color:#404040;'>    Tested with sleeps on 10.4-10.5 ppc and 10.7-10.11 x86_64.
</span>---
 src/time.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/time.c b/src/time.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 4e768b2..1b53efa 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/time.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -109,6 +109,14 @@ uint64_t mach_approximate_time(void)
</span>  * Unlike the mach scale factor setup, attempting to set up the sleep offset
  * simultaneously from multiple threads can cause trouble, so we protect
  * the setup code with a mutex.
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * To maximize consistency, we use a "constructor" function to initialize
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the sleep offset at program launch, rather than waiting for the first
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * use.  This means that programs launched at about the same time should
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * have close agreement on the offset.  An added benefit is that it avoids
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the additional slowness on the first relevant call.  And since it needs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the mach scale factor, it also eliminates most of the first-time delay
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * in the other calls using that factor.
</span>  */
 
 #define MIN_SLEEP_OFFSET_ADVANCE 5
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -247,6 +255,17 @@ static void get_sleep_offset(void)
</span>   (void) pthread_mutex_unlock(&sleepofs_lock);
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Initialize the sleep offset at program launch.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * If this fails for some reason, we'll try again at first use.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static void __attribute__((constructor))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+startup_sleep_offset(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  get_sleep_offset();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> uint64_t mach_continuous_time(void)
 {
   uint64_t mach_time;
</pre><pre style='margin:0'>

</pre>