protect signal handling with locks for threaded version.
fix close/1 entry in manual (obs from Nicos). fix -f option in chr Makefile. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2201 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
708e69a670
commit
78d7105c16
10
C/absmi.c
10
C/absmi.c
@ -10,8 +10,11 @@
|
|||||||
* *
|
* *
|
||||||
* File: absmi.c *
|
* File: absmi.c *
|
||||||
* comments: Portable abstract machine interpreter *
|
* comments: Portable abstract machine interpreter *
|
||||||
* Last rev: $Date: 2008-04-03 10:50:23 $,$Author: vsc $ *
|
* Last rev: $Date: 2008-04-03 13:26:37 $,$Author: vsc $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.238 2008/04/03 10:50:23 vsc
|
||||||
|
* term_variables could store local variable in global.
|
||||||
|
*
|
||||||
* Revision 1.237 2008/03/26 14:37:07 vsc
|
* Revision 1.237 2008/03/26 14:37:07 vsc
|
||||||
* more icc fixes
|
* more icc fixes
|
||||||
*
|
*
|
||||||
@ -8069,10 +8072,15 @@ Yap_absmi(int inp)
|
|||||||
H += 2;
|
H += 2;
|
||||||
{
|
{
|
||||||
PredEntry *pt0;
|
PredEntry *pt0;
|
||||||
|
LOCK(ThreadHandlesLock);
|
||||||
pt0 = SpyCode;
|
pt0 = SpyCode;
|
||||||
P_before_spy = PREG;
|
P_before_spy = PREG;
|
||||||
PREG = pt0->CodeOfPred;
|
PREG = pt0->CodeOfPred;
|
||||||
/* for profiler */
|
/* for profiler */
|
||||||
|
#ifdef THREADS
|
||||||
|
pthread_mutex_lock(&(ThreadHandle[worker_id].tlock));
|
||||||
|
#endif
|
||||||
|
UNLOCK(ThreadHandlesLock);
|
||||||
save_pc();
|
save_pc();
|
||||||
CACHE_A1();
|
CACHE_A1();
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
|
@ -10,8 +10,11 @@
|
|||||||
* File: c_interface.c *
|
* File: c_interface.c *
|
||||||
* comments: c_interface primitives definition *
|
* comments: c_interface primitives definition *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2008-04-02 21:44:07 $,$Author: vsc $ *
|
* Last rev: $Date: 2008-04-03 13:26:38 $,$Author: vsc $ *
|
||||||
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
||||||
|
* Revision 1.111 2008/04/02 21:44:07 vsc
|
||||||
|
* threaded version should ignore saved states (for now).
|
||||||
|
*
|
||||||
* Revision 1.110 2008/04/02 17:37:06 vsc
|
* Revision 1.110 2008/04/02 17:37:06 vsc
|
||||||
* handle out of memory error at thread creation (obs from Paulo Moura).
|
* handle out of memory error at thread creation (obs from Paulo Moura).
|
||||||
*
|
*
|
||||||
@ -1663,7 +1666,7 @@ YAP_Init(YAP_init_args *yap_init)
|
|||||||
Yap_argc = yap_init->Argc;
|
Yap_argc = yap_init->Argc;
|
||||||
#ifdef THREADS
|
#ifdef THREADS
|
||||||
if (yap_init->SavedState) {
|
if (yap_init->SavedState) {
|
||||||
fprintf(stderr,"[ WARNING: thread Yap will ignore saved state %s ]\n",yap_init->SavedState);
|
fprintf(stderr,"[ WARNING: threaded Yap will ignore saved state %s ]\n",yap_init->SavedState);
|
||||||
yap_init->SavedState = NULL;
|
yap_init->SavedState = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -269,7 +269,7 @@ dump_stack(void)
|
|||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
fprintf(stderr,"%% YAP regs: P=%p, CP=%p, ASP=%p, H=%p, TR=%p, HeapTop=%p\n",P,CP,ASP,H,TR,HeapTop);
|
fprintf(stderr,"%% YAP regs: P=%p, CP=%p, ASP=%p, H=%p, TR=%p, HeapTop=%p\n",P,CP,ASP,H,TR,HeapTop);
|
||||||
fprintf(stderr,"%% YAP mode: %x\n",Yap_PrologMode);
|
fprintf(stderr,"%% YAP mode: %ux\n",(unsigned long int)Yap_PrologMode);
|
||||||
if (Yap_ErrorMessage)
|
if (Yap_ErrorMessage)
|
||||||
fprintf(stderr,"%% YAP_ErrorMessage: %s\n",Yap_ErrorMessage);
|
fprintf(stderr,"%% YAP_ErrorMessage: %s\n",Yap_ErrorMessage);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2513,6 +2513,9 @@ static Int
|
|||||||
p_first_signal(void)
|
p_first_signal(void)
|
||||||
{
|
{
|
||||||
LOCK(SignalLock);
|
LOCK(SignalLock);
|
||||||
|
#ifdef THREADS
|
||||||
|
pthread_mutex_lock(&(ThreadHandle[worker_id].tlock));
|
||||||
|
#endif
|
||||||
/* always do wakeups first, because you don't want to keep the
|
/* always do wakeups first, because you don't want to keep the
|
||||||
non-backtrackable variable bad */
|
non-backtrackable variable bad */
|
||||||
if (ActiveSignals & YAP_WAKEUP_SIGNAL) {
|
if (ActiveSignals & YAP_WAKEUP_SIGNAL) {
|
||||||
@ -2586,6 +2589,9 @@ p_first_signal(void)
|
|||||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_statistics")));
|
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_statistics")));
|
||||||
}
|
}
|
||||||
UNLOCK(SignalLock);
|
UNLOCK(SignalLock);
|
||||||
|
#ifdef THREADS
|
||||||
|
pthread_mutex_unlock(&(ThreadHandle[worker_id].tlock));
|
||||||
|
#endif
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2632,6 +2638,9 @@ p_continue_signals(void)
|
|||||||
if (ActiveSignals & YAP_STATISTICS_SIGNAL) {
|
if (ActiveSignals & YAP_STATISTICS_SIGNAL) {
|
||||||
Yap_signal(YAP_STATISTICS_SIGNAL);
|
Yap_signal(YAP_STATISTICS_SIGNAL);
|
||||||
}
|
}
|
||||||
|
#ifdef THREADS
|
||||||
|
pthread_mutex_unlock(&(ThreadHandle[worker_id].tlock));
|
||||||
|
#endif
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
C/threads.c
14
C/threads.c
@ -669,6 +669,13 @@ p_thread_runtime(void)
|
|||||||
return Yap_unify(ARG1,MkIntegerTerm(ThreadsTotalTime));
|
return Yap_unify(ARG1,MkIntegerTerm(ThreadsTotalTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_thread_self_lock(void)
|
||||||
|
{ /* '$thread_self_lock' */
|
||||||
|
pthread_mutex_lock(&(ThreadHandle[worker_id].tlock));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void Yap_InitThreadPreds(void)
|
void Yap_InitThreadPreds(void)
|
||||||
{
|
{
|
||||||
Yap_InitCPred("$no_threads", 0, p_no_threads, HiddenPredFlag);
|
Yap_InitCPred("$no_threads", 0, p_no_threads, HiddenPredFlag);
|
||||||
@ -741,6 +748,12 @@ p_thread_self(void)
|
|||||||
return Yap_unify(ARG1,MkIntTerm(0));
|
return Yap_unify(ARG1,MkIntTerm(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_thread_self_lock(void)
|
||||||
|
{ /* '$thread_runtime'(+P) */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void Yap_InitThreadPreds(void)
|
void Yap_InitThreadPreds(void)
|
||||||
{
|
{
|
||||||
Yap_InitCPred("$thread_self", 1, p_thread_self, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$thread_self", 1, p_thread_self, SafePredFlag|HiddenPredFlag);
|
||||||
@ -749,6 +762,7 @@ void Yap_InitThreadPreds(void)
|
|||||||
Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag|HiddenPredFlag);
|
Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag|HiddenPredFlag);
|
||||||
|
Yap_InitCPred("$self_thread_lock", p_thread_self_lock, SafePredFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,34 +51,34 @@ EXAMPLES= $(srcdir)/Benchmarks/chrfreeze.chr $(srcdir)/Benchmarks/fib.chr $(srcd
|
|||||||
all: chr_translate.pl
|
all: chr_translate.pl
|
||||||
|
|
||||||
chr_translate_bootstrap1.pl: $(srcdir)/chr_translate_bootstrap1.chr
|
chr_translate_bootstrap1.pl: $(srcdir)/chr_translate_bootstrap1.chr
|
||||||
$(PL) -l chr_swi_bootstrap.yap \
|
$(PL) -f -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step1('$<','$@'),halt." \
|
-g "chr_compile_step1('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
$(PL) -l chr_swi_bootstrap.yap \
|
$(PL) -f -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step2('$<','$@'),halt." \
|
-g "chr_compile_step2('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
|
|
||||||
chr_translate_bootstrap2.pl: $(srcdir)/chr_translate_bootstrap2.chr chr_translate_bootstrap1.pl
|
chr_translate_bootstrap2.pl: $(srcdir)/chr_translate_bootstrap2.chr chr_translate_bootstrap1.pl
|
||||||
$(PL) -l chr_swi_bootstrap.yap \
|
$(PL) -f -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step2('$<','$@'),halt." \
|
-g "chr_compile_step2('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
$(PL) -l chr_swi_bootstrap.yap \
|
$(PL) -f -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step3('$<','$@'),halt." \
|
-g "chr_compile_step3('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
|
|
||||||
guard_entailment.pl: $(srcdir)/guard_entailment.chr chr_translate_bootstrap2.pl
|
guard_entailment.pl: $(srcdir)/guard_entailment.chr chr_translate_bootstrap2.pl
|
||||||
$(PL) -l chr_swi_bootstrap.yap \
|
$(PL) -f -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step3('$<','$@'),halt." \
|
-g "chr_compile_step3('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
|
|
||||||
chr_translate.pl: $(srcdir)/chr_translate.chr chr_translate_bootstrap2.pl guard_entailment.pl
|
chr_translate.pl: $(srcdir)/chr_translate.chr chr_translate_bootstrap2.pl guard_entailment.pl
|
||||||
$(PL) -l chr_swi_bootstrap.yap \
|
$(PL) -f -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step3('$<','$@'),halt." \
|
-g "chr_compile_step3('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
$(PL) -p chr=. -l chr_swi_bootstrap.yap \
|
$(PL) -f -p chr=. -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step4('guard_entailment.chr','guard_entailment.pl'),halt." \
|
-g "chr_compile_step4('guard_entailment.chr','guard_entailment.pl'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
$(PL) -p chr=. -l chr_swi_bootstrap.yap \
|
$(PL) -f -p chr=. -l chr_swi_bootstrap.yap \
|
||||||
-g "chr_compile_step4('$<','$@'),halt." \
|
-g "chr_compile_step4('$<','$@'),halt." \
|
||||||
-z 'halt(1).'
|
-z 'halt(1).'
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ install: chr_translate.pl guard_entailment.pl
|
|||||||
$(INSTALL) -m 644 $(LIBPL) $(DESTDIR)$(CHRDIR)
|
$(INSTALL) -m 644 $(LIBPL) $(DESTDIR)$(CHRDIR)
|
||||||
$(INSTALL) -m 644 $(CHRPL) $(DESTDIR)$(SHAREDIR)/chr.pl
|
$(INSTALL) -m 644 $(CHRPL) $(DESTDIR)$(SHAREDIR)/chr.pl
|
||||||
$(INSTALL) -m 644 $(srcdir)/README $(DESTDIR)$(CHRDIR)
|
$(INSTALL) -m 644 $(srcdir)/README $(DESTDIR)$(CHRDIR)
|
||||||
# $(PL) -g make -z halt
|
# $(PL) -f -g make -z halt
|
||||||
|
|
||||||
rpm-install: install
|
rpm-install: install
|
||||||
|
|
||||||
|
@ -4073,9 +4073,9 @@ Closes the stream @var{S}. If @var{S} does not stand for a stream
|
|||||||
currently opened an error is reported. The streams @code{user_input},
|
currently opened an error is reported. The streams @code{user_input},
|
||||||
@code{user_output}, and @code{user_error} can never be closed.
|
@code{user_output}, and @code{user_error} can never be closed.
|
||||||
|
|
||||||
By default, give a file name, @code{close/1} will also try to close a
|
@c By default, give a file name, @code{close/1} will also try to close a
|
||||||
corresponding open stream. This feature is not available in ISO or
|
@c corresponding open stream. This feature is not available in ISO or
|
||||||
SICStus languages mode and is deprecated.
|
@c SICStus languages mode and is deprecated.
|
||||||
|
|
||||||
@item close(+@var{S},+@var{O}) [ISO]
|
@item close(+@var{S},+@var{O}) [ISO]
|
||||||
@findex close/2
|
@findex close/2
|
||||||
|
Reference in New Issue
Block a user