without threads
This commit is contained in:
parent
47d436fc13
commit
f257efc2ef
39
C/signals.c
39
C/signals.c
|
@ -37,9 +37,14 @@ static char SccsId[] = "%W% %G%";
|
||||||
#endif
|
#endif
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
|
#ifndef THREADS
|
||||||
|
#define worker_id 0
|
||||||
|
#endif
|
||||||
|
|
||||||
inline static void
|
inline static void
|
||||||
do_signal(int wid, yap_signals sig USES_REGS)
|
do_signal(int wid, yap_signals sig USES_REGS)
|
||||||
{
|
{
|
||||||
|
#if THREADS
|
||||||
LOCK(REMOTE_SignalLock(wid));
|
LOCK(REMOTE_SignalLock(wid));
|
||||||
if (!REMOTE_InterruptsDisabled(wid)) {
|
if (!REMOTE_InterruptsDisabled(wid)) {
|
||||||
REMOTE_ThreadHandle(wid).current_yaam_regs->CreepFlag_ =
|
REMOTE_ThreadHandle(wid).current_yaam_regs->CreepFlag_ =
|
||||||
|
@ -48,11 +53,37 @@ do_signal(int wid, yap_signals sig USES_REGS)
|
||||||
REMOTE_ThreadHandle(wid).current_yaam_regs->EventFlag_ =
|
REMOTE_ThreadHandle(wid).current_yaam_regs->EventFlag_ =
|
||||||
Unsigned(REMOTE_ThreadHandle(wid).current_yaam_regs->LCL0_);
|
Unsigned(REMOTE_ThreadHandle(wid).current_yaam_regs->LCL0_);
|
||||||
}
|
}
|
||||||
|
UInt i = REMOTE_FirstActiveSignal(wid);
|
||||||
|
if (REMOTE_FirstActiveSignal(wid) != REMOTE_LastActiveSignal(wid)) {
|
||||||
|
do {
|
||||||
|
if (sig == REMOTE_ActiveSignals(wid)[i]) {
|
||||||
|
UNLOCK(REMOTE_SignalLock(wid));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
if (i == REMOTE_MaxActiveSignals(wid))
|
||||||
|
i = 0;
|
||||||
|
} while (i != REMOTE_LastActiveSignal(wid));
|
||||||
|
}
|
||||||
|
REMOTE_ActiveSignals(wid)[i] = sig;
|
||||||
|
REMOTE_LastActiveSignal(wid)++;
|
||||||
|
if (REMOTE_LastActiveSignal(wid) == REMOTE_MaxActiveSignals(wid))
|
||||||
|
REMOTE_LastActiveSignal(wid) = 0;
|
||||||
|
UNLOCK(REMOTE_SignalLock(wid));
|
||||||
|
#else
|
||||||
|
LOCK(LOCAL_SignalLock);
|
||||||
|
if (!LOCAL_InterruptsDisabled) {
|
||||||
|
Yap_regp->CreepFlag_ =
|
||||||
|
Unsigned(Yap_regp->LCL0_);
|
||||||
|
if (sig != YAP_CREEP_SIGNAL)
|
||||||
|
Yap_regp->EventFlag_ =
|
||||||
|
Unsigned(Yap_regp->LCL0_);
|
||||||
|
}
|
||||||
UInt i = LOCAL_FirstActiveSignal;
|
UInt i = LOCAL_FirstActiveSignal;
|
||||||
if (LOCAL_FirstActiveSignal != LOCAL_LastActiveSignal) {
|
if (LOCAL_FirstActiveSignal != LOCAL_LastActiveSignal) {
|
||||||
do {
|
do {
|
||||||
if (sig == LOCAL_ActiveSignals[i]) {
|
if (sig == LOCAL_ActiveSignals[i]) {
|
||||||
UNLOCK(REMOTE_SignalLock(wid));
|
UNLOCK(LOCAL_SignalLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
@ -64,8 +95,8 @@ do_signal(int wid, yap_signals sig USES_REGS)
|
||||||
LOCAL_LastActiveSignal++;
|
LOCAL_LastActiveSignal++;
|
||||||
if (LOCAL_LastActiveSignal == LOCAL_MaxActiveSignals)
|
if (LOCAL_LastActiveSignal == LOCAL_MaxActiveSignals)
|
||||||
LOCAL_LastActiveSignal = 0;
|
LOCAL_LastActiveSignal = 0;
|
||||||
UNLOCK(REMOTE_SignalLock(wid));
|
UNLOCK(LOCAL_SignalLock);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static int
|
inline static int
|
||||||
|
@ -163,7 +194,9 @@ Yap_signal(yap_signals sig)
|
||||||
void
|
void
|
||||||
Yap_external_signal(int wid, yap_signals sig)
|
Yap_external_signal(int wid, yap_signals sig)
|
||||||
{
|
{
|
||||||
|
#if THREADS
|
||||||
REGSTORE *regcache = REMOTE_ThreadHandle(wid).current_yaam_regs;
|
REGSTORE *regcache = REMOTE_ThreadHandle(wid).current_yaam_regs;
|
||||||
|
#endif
|
||||||
do_signal(wid, sig PASS_REGS);
|
do_signal(wid, sig PASS_REGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -428,7 +428,9 @@ static Int p_stop_low_level_trace( USES_REGS1 )
|
||||||
{
|
{
|
||||||
Yap_do_low_level_trace = FALSE;
|
Yap_do_low_level_trace = FALSE;
|
||||||
LOCAL_do_trace_primitives = TRUE;
|
LOCAL_do_trace_primitives = TRUE;
|
||||||
|
#if DEBUG_LOCKS
|
||||||
debug_locks = TRUE;
|
debug_locks = TRUE;
|
||||||
|
#endif
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
VERSION=6.3.4
|
VERSION=6.3.4
|
||||||
THREADS=yes
|
THREADS=no
|
||||||
if test $# = 0; then
|
if test $# = 0; then
|
||||||
ABI=64
|
ABI=64
|
||||||
elif test $# = 1; then
|
elif test $# = 1; then
|
||||||
|
|
Reference in New Issue