mirror of
https://github.com/Interlisp/maiko.git
synced 2026-03-15 14:27:19 +00:00
Compare commits
1 Commits
nhb-rewrit
...
fgh_fix-21
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
959f77402f |
@@ -315,7 +315,7 @@ const char *nethubHelpstring =
|
||||
const char *nethubHelpstring = "";
|
||||
#endif
|
||||
|
||||
#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
extern int insnsCountdownForTimerAsyncEmulation;
|
||||
#endif
|
||||
|
||||
@@ -601,7 +601,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
#endif /* MAIKO_ENABLE_NETHUB */
|
||||
|
||||
#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
else if (!strcmp(argv[i], "-intr-emu-insns")) {
|
||||
if (argc > ++i) {
|
||||
errno = 0;
|
||||
|
||||
12
src/timer.c
12
src/timer.c
@@ -454,6 +454,11 @@ static void int_timer_service(int sig)
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
#if MAIKO_OS_LINUX
|
||||
// for WSL1, which doesn't support setitimer(ITIMER_VIRTUAL ...)
|
||||
int linux_emulate_timer = 0;
|
||||
#endif /* MAIKO_OS_LINUX */
|
||||
|
||||
static void int_timer_init(void)
|
||||
|
||||
{
|
||||
@@ -489,6 +494,11 @@ static void int_timer_init(void)
|
||||
/* then attach a timer to it and turn it loose */
|
||||
timert.it_interval.tv_sec = timert.it_value.tv_sec = 0;
|
||||
timert.it_interval.tv_usec = timert.it_value.tv_usec = TIMER_INTERVAL;
|
||||
|
||||
#if MAIKO_OS_LINUX
|
||||
// (For WSL1) Capture error output from setittimer to indicate need to emulate timer
|
||||
linux_emulate_timer =
|
||||
#endif /* MAIKO_OS_LINUX */
|
||||
setitimer(ITIMER_VIRTUAL, &timert, NULL);
|
||||
|
||||
DBPRINT(("Timer interval set to %ld usec\n", (long)timert.it_value.tv_usec));
|
||||
@@ -499,7 +509,7 @@ static void int_timer_init(void)
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/*
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
|
||||
19
src/xc.c
19
src/xc.c
@@ -173,7 +173,7 @@ static const int n_mask_array[16] = {
|
||||
|
||||
extern int TIMER_INTERVAL;
|
||||
|
||||
#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
|
||||
# if !defined(MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN)
|
||||
# define MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN 20000
|
||||
@@ -181,7 +181,9 @@ extern int TIMER_INTERVAL;
|
||||
|
||||
int insnsCountdownForTimerAsyncEmulation = MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN;
|
||||
static int pseudoTimerAsyncCountdown = MAIKO_TIMER_ASYNC_EMULATION_INSNS_COUNTDOWN;
|
||||
|
||||
#if MAIKO_OS_LINUX
|
||||
extern int linux_emulate_timer;
|
||||
#endif /* MAIKO_OS_LINUX */
|
||||
#endif
|
||||
|
||||
void dispatch(void) {
|
||||
@@ -282,10 +284,12 @@ nextopcode:
|
||||
#endif /* PCTRACE */
|
||||
|
||||
/* quick_stack_check();*/ /* JDS 2/12/98 */
|
||||
|
||||
#if defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
if (--pseudoTimerAsyncCountdown <= 0) {
|
||||
Irq_Stk_Check = 0;
|
||||
#if MAIKO_OS_LINUX || defined(MAIKO_EMULATE_TIMER_INTERRUPTS) || defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
#if MAIKO_OS_LINUX
|
||||
if (linux_emulate_timer) {
|
||||
#endif /* MAIKO_OS_LINUX */
|
||||
if (--pseudoTimerAsyncCountdown <= 0) {
|
||||
Irq_Stk_Check = 0;
|
||||
Irq_Stk_End = 0;
|
||||
#if defined(MAIKO_EMULATE_ASYNC_INTERRUPTS)
|
||||
IO_Signalled = TRUE;
|
||||
@@ -294,6 +298,9 @@ nextopcode:
|
||||
emscripten_sleep(1);
|
||||
#endif
|
||||
pseudoTimerAsyncCountdown = insnsCountdownForTimerAsyncEmulation;
|
||||
#if MAIKO_OS_LINUX
|
||||
}
|
||||
#endif /* MAIKO_OS_LINUX */
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user