dst/source/patch/sync.d

40 lines
849 B
D
Raw Normal View History

2025-06-26 18:47:07 +00:00
module patch.sync;
import core.sys.posix.time : clock_gettime, CLOCK_MONOTONIC, timespec;
import patches : isPatchEnabled;
// Define TIMEDIFF macro
long TIMEDIFF(timespec t1, timespec t2) {
return (t1.tv_sec - t2.tv_sec) * 1000 + (t1.tv_nsec - t2.tv_nsec) / 1_000_000;
}
// Define these globals for sync patch
__gshared {
int su = 0;
int twrite_aborted = 0;
}
static if (isPatchEnabled!"SYNC_PATCH") {
timespec sutv;
void tsync_begin() {
clock_gettime(CLOCK_MONOTONIC, &sutv);
su = 1;
}
void tsync_end() {
su = 0;
}
int tinsync(uint timeout) {
timespec now;
if (su && !clock_gettime(CLOCK_MONOTONIC, &now)
&& TIMEDIFF(now, sutv) >= timeout)
su = 0;
return su;
}
int ttyread_pending() {
return twrite_aborted;
}
}