/* -----------------------------------------------------------------------------
- * $Id: StgMacros.h,v 1.23 2000/03/16 12:40:40 simonmar Exp $
+ * $Id: StgMacros.h,v 1.24 2000/03/17 13:30:23 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
#define THREAD_RETURN(ptrs) \
ASSERT(ptrs==1); \
- CurrentTSO->whatNext = ThreadEnterGHC; \
+ CurrentTSO->what_next = ThreadEnterGHC; \
R1.i = ThreadBlocked; \
JMP_(StgReturn);
#endif
/* -----------------------------------------------------------------------------
- * $Id: TSO.h,v 1.12 2000/03/17 09:53:19 simonmar Exp $
+ * $Id: TSO.h,v 1.13 2000/03/17 13:30:23 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
} StgTSOState;
/*
- * The whatNext field of a TSO indicates how the thread is to be run.
+ * The what_next field of a TSO indicates how the thread is to be run.
*/
typedef enum {
ThreadEnterGHC, /* enter top thunk on stack */
StgMutClosure * mut_link; /* TSO's are mutable of course! */
struct StgTSO_* global_link; /* Links all threads together */
- StgTSOWhatNext whatNext;
+ StgTSOWhatNext what_next;
StgTSOBlockReason why_blocked;
StgTSOBlockInfo block_info;
struct StgTSO_* blocked_exceptions;
A zombie thread has the following properties:
- tso->whatNext == ThreadComplete or ThreadKilled
+ tso->what_next == ThreadComplete or ThreadKilled
tso->link == (could be on some queue somewhere)
tso->su == tso->stack + tso->stack_size
tso->sp == tso->stack + tso->stack_size - 1 (i.e. top stack word)
- tso->sp[0] == return value of thread, if whatNext == ThreadComplete,
- exception , if whatNext == ThreadKilled
+ tso->sp[0] == return value of thread, if what_next == ThreadComplete,
+ exception , if what_next == ThreadKilled
(tso->sp is left pointing at the top word on the stack so that
the return value or exception will be retained by a GC).
* Copyright (c) 1994-1998.
*
* $RCSfile: Evaluator.c,v $
- * $Revision: 1.40 $
- * $Date: 2000/03/14 14:34:47 $
+ * $Revision: 1.41 $
+ * $Date: 2000/03/17 13:30:23 $
* ---------------------------------------------------------------------------*/
#include "Rts.h"
case SE_CAF_BLACKHOLE:
{
/* Let the scheduler figure out what to do :-) */
- cap->rCurrentTSO->whatNext = ThreadEnterGHC;
+ cap->rCurrentTSO->what_next = ThreadEnterGHC;
xPushCPtr(obj);
RETURN(ThreadYielding);
}
case RET_VEC_SMALL:
case RET_BIG:
case RET_VEC_BIG:
- cap->rCurrentTSO->whatNext = ThreadEnterGHC;
+ cap->rCurrentTSO->what_next = ThreadEnterGHC;
xPushCPtr(obj);
RETURN(ThreadYielding);
default:
//fprintf(stderr, "entering unknown closure -- yielding to sched\n");
//printObj(obj);
//LLL;
- cap->rCurrentTSO->whatNext = ThreadEnterGHC;
+ cap->rCurrentTSO->what_next = ThreadEnterGHC;
xPushCPtr(obj); /* code to restart with */
RETURN(ThreadYielding);
}
/* -----------------------------------------------------------------------------
- * $Id: Exception.hc,v 1.9 2000/03/17 10:24:44 simonmar Exp $
+ * $Id: Exception.hc,v 1.10 2000/03/17 13:30:23 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
/* This thread may have been relocated.
* (see Schedule.c:threadStackOverflow)
*/
- while (R1.t->whatNext == ThreadRelocated) {
+ while (R1.t->what_next == ThreadRelocated) {
R1.t = R1.t->link;
}
if (R1.t == CurrentTSO) {
SaveThreadState(); /* inline! */
STGCALL2(raiseAsync, R1.t, R2.cl);
- if (CurrentTSO->whatNext == ThreadKilled) {
+ if (CurrentTSO->what_next == ThreadKilled) {
R1.w = ThreadYielding;
JMP_(StgReturn);
}
LoadThreadState();
- if (CurrentTSO->whatNext == ThreadEnterGHC) {
+ if (CurrentTSO->what_next == ThreadEnterGHC) {
R1.w = Sp[0];
Sp++;
JMP_(GET_ENTRY(R1.cl));
/* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.73 2000/03/16 17:27:12 simonmar Exp $
+ * $Id: GC.c,v 1.74 2000/03/17 13:30:24 simonmar Exp $
*
* (c) The GHC Team 1998-1999
*
/* Threads which have finished or died get dropped from
* the list.
*/
- switch (t->whatNext) {
+ switch (t->what_next) {
case ThreadKilled:
case ThreadComplete:
next = t->global_link;
goto large;
case TSO:
- if (((StgTSO *)p)->whatNext == ThreadRelocated) {
+ if (((StgTSO *)p)->what_next == ThreadRelocated) {
p = (StgClosure *)((StgTSO *)p)->link;
continue;
}
/* Deal with redirected TSOs (a TSO that's had its stack enlarged).
*/
- if (tso->whatNext == ThreadRelocated) {
+ if (tso->what_next == ThreadRelocated) {
q = (StgClosure *)tso->link;
goto loop;
}
/* -----------------------------------------------------------------------------
- * $Id: HeapStackCheck.hc,v 1.12 2000/03/02 10:11:50 sewardj Exp $
+ * $Id: HeapStackCheck.hc,v 1.13 2000/03/17 13:30:24 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
R1.i = StackOverflow; \
} \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadRunGHC; \
+ CurrentTSO->what_next = ThreadRunGHC; \
JMP_(StgReturn);
#define GC_ENTER \
R1.i = StackOverflow; \
} \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadEnterGHC; \
+ CurrentTSO->what_next = ThreadEnterGHC; \
JMP_(StgReturn);
#define HP_GENERIC \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadRunGHC; \
+ CurrentTSO->what_next = ThreadRunGHC; \
R1.i = HeapOverflow; \
JMP_(StgReturn);
#define STK_GENERIC \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadRunGHC; \
+ CurrentTSO->what_next = ThreadRunGHC; \
R1.i = StackOverflow; \
JMP_(StgReturn);
#define YIELD_GENERIC \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadRunGHC; \
+ CurrentTSO->what_next = ThreadRunGHC; \
R1.i = ThreadYielding; \
JMP_(StgReturn);
#define YIELD_TO_HUGS \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadEnterHugs; \
+ CurrentTSO->what_next = ThreadEnterHugs; \
R1.i = ThreadYielding; \
JMP_(StgReturn);
#define BLOCK_GENERIC \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadRunGHC; \
+ CurrentTSO->what_next = ThreadRunGHC; \
R1.i = ThreadBlocked; \
JMP_(StgReturn);
#define BLOCK_ENTER \
SaveThreadState(); \
- CurrentTSO->whatNext = ThreadEnterGHC;\
+ CurrentTSO->what_next = ThreadEnterGHC;\
R1.i = ThreadBlocked; \
JMP_(StgReturn);
Sp[0] = R1.w;
R1.i = HeapOverflow;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
JMP_(StgReturn);
FE_
}
{
FB_
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp -= 1;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadYielding;
JMP_(StgReturn);
FE_
Sp -= 1;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
Sp[1] = R2.w;
Sp[0] = R1.w;
SaveThreadState();
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
EXTFUN(par_jump)
{
FB_
- CurrentTSO->whatNext = ThreadEnterGHC;
+ CurrentTSO->what_next = ThreadEnterGHC;
R1.i = ThreadBlocked;
JMP_(StgReturn);
FE_
/* -----------------------------------------------------------------------------
- * $Id: Sanity.c,v 1.16 2000/01/30 10:16:09 simonmar Exp $
+ * $Id: Sanity.c,v 1.17 2000/03/17 13:30:24 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
StgOffset stack_size = tso->stack_size;
StgPtr stack_end = stack + stack_size;
- if (tso->whatNext == ThreadRelocated) {
+ if (tso->what_next == ThreadRelocated) {
checkTSO(tso->link);
return;
}
- if (tso->whatNext == ThreadComplete || tso->whatNext == ThreadKilled) {
+ if (tso->what_next == ThreadComplete || tso->what_next == ThreadKilled) {
/* The garbage collector doesn't bother following any pointers
* from dead threads, so don't check sanity here.
*/
/* ---------------------------------------------------------------------------
- * $Id: Schedule.c,v 1.54 2000/03/16 17:33:04 simonmar Exp $
+ * $Id: Schedule.c,v 1.55 2000/03/17 13:30:24 simonmar Exp $
*
* (c) The GHC Team, 1998-2000
*
StgMainThread *m, **prev;
prev = &main_threads;
for (m = main_threads; m != NULL; m = m->link) {
- switch (m->tso->whatNext) {
+ switch (m->tso->what_next) {
case ThreadComplete:
if (m->ret) {
*(m->ret) = (StgClosure *)m->tso->sp[0];
*/
{
StgMainThread *m = main_threads;
- if (m->tso->whatNext == ThreadComplete
- || m->tso->whatNext == ThreadKilled) {
+ if (m->tso->what_next == ThreadComplete
+ || m->tso->what_next == ThreadKilled) {
main_threads = main_threads->link;
- if (m->tso->whatNext == ThreadComplete) {
+ if (m->tso->what_next == ThreadComplete) {
/* we finished successfully, fill in the return value */
if (m->ret) { *(m->ret) = (StgClosure *)m->tso->sp[0]; };
m->stat = Success;
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* Run the current thread
*/
- switch (cap->rCurrentTSO->whatNext) {
+ switch (cap->rCurrentTSO->what_next) {
case ThreadKilled:
case ThreadComplete:
/* Thread already finished, return to scheduler. */
barf("Panic: entered a BCO but no bytecode interpreter in this build");
#endif
default:
- barf("schedule: invalid whatNext field");
+ barf("schedule: invalid what_next field");
}
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
* GC is finished.
*/
IF_DEBUG(scheduler,
- if (t->whatNext == ThreadEnterHugs) {
+ if (t->what_next == ThreadEnterHugs) {
/* ToDo: or maybe a timer expired when we were in Hugs?
* or maybe someone hit ctrl-C
*/
* we get a new one.
*/
IF_DEBUG(scheduler,belch("thread %ld finished", t->id));
- t->whatNext = ThreadComplete;
+ t->what_next = ThreadComplete;
#if defined(GRAN)
// ToDo: endThread(t, CurrentProc); // clean-up the thread
#elif defined(PAR)
#if defined(GRAN)
SET_GRAN_HDR(tso, ThisPE);
#endif
- tso->whatNext = ThreadEnterGHC;
+ tso->what_next = ThreadEnterGHC;
/* tso->id needs to be unique. For now we use a heavyweight mutex to
* protect the increment operation on next_thread_id.
* of the stack, so we don't attempt to scavenge any part of the
* dead TSO's stack.
*/
- tso->whatNext = ThreadRelocated;
+ tso->what_next = ThreadRelocated;
tso->link = dest;
tso->sp = (P_)&(tso->stack[tso->stack_size]);
tso->su = (StgUpdateFrame *)tso->sp;
StgPtr sp = tso->sp;
/* Thread already dead? */
- if (tso->whatNext == ThreadComplete || tso->whatNext == ThreadKilled) {
+ if (tso->what_next == ThreadComplete || tso->what_next == ThreadKilled) {
return;
}
*/
sp[0] = (W_)ap;
tso->sp = sp;
- tso->whatNext = ThreadEnterGHC;
+ tso->what_next = ThreadEnterGHC;
return;
}
/* We've stripped the entire stack, the thread is now dead. */
sp += sizeofW(StgStopFrame) - 1;
sp[0] = (W_)exception; /* save the exception */
- tso->whatNext = ThreadKilled;
+ tso->what_next = ThreadKilled;
tso->su = (StgUpdateFrame *)(sp+1);
tso->sp = sp;
return;
void
printThreadStatus(StgTSO *tso)
{
- switch (tso->whatNext) {
+ switch (tso->what_next) {
case ThreadKilled:
fprintf(stderr,"has been killed");
break;