]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/remote_time.h
xnu-6153.11.26.tar.gz
[apple/xnu.git] / osfmk / kern / remote_time.h
index dc1d04a6154616863627f29b3724c072dadfc93e..020e845b476bb7bc9f392d1cf87e69855bfaf718 100644 (file)
@@ -55,7 +55,12 @@ mach_bridge_compute_timestamp(uint64_t local_ts_ns, struct bt_params *params)
         */
        int64_t remote_ts = 0;
        int64_t rate_prod = 0;
         */
        int64_t remote_ts = 0;
        int64_t rate_prod = 0;
-       rate_prod = (int64_t)(params->rate * (double)((int64_t)local_ts_ns - (int64_t)params->base_local_ts));
+       /* To avoid precision loss due to typecasting from int64_t to double */
+       if (params->rate != 1.0) {
+               rate_prod = (int64_t)(params->rate * (double)((int64_t)local_ts_ns - (int64_t)params->base_local_ts));
+       } else {
+               rate_prod = (int64_t)local_ts_ns - (int64_t)params->base_local_ts;
+       }
        if (os_add_overflow((int64_t)params->base_remote_ts, rate_prod, &remote_ts)) {
                return 0;
        }
        if (os_add_overflow((int64_t)params->base_remote_ts, rate_prod, &remote_ts)) {
                return 0;
        }