merged System>>_enableProcessSwitching and System>>_disbaleProcessSwitching to System>>_toggleProcessSwitching:
This commit is contained in:
parent
b5b72c626c
commit
e7cc1936fb
@ -183,7 +183,7 @@ class System(Apex)
|
|||||||
nil.
|
nil.
|
||||||
]
|
]
|
||||||
ensure: [
|
ensure: [
|
||||||
| pid proc |
|
| pid proc oldps |
|
||||||
|
|
||||||
// stop subscribing to signals.
|
// stop subscribing to signals.
|
||||||
os_intr_sem signal.
|
os_intr_sem signal.
|
||||||
@ -193,9 +193,9 @@ class System(Apex)
|
|||||||
|
|
||||||
// this disables autonomous process switching only.
|
// this disables autonomous process switching only.
|
||||||
// TODO: check if the ensure block code can trigger process switching?
|
// TODO: check if the ensure block code can trigger process switching?
|
||||||
// whap happens if the ensure block creates new processes? this is likely to affect the termination loop below.
|
// what happens if the ensure block creates new processes? this is likely to affect the termination loop below.
|
||||||
// even the id of the terminated process may get reused....
|
// even the id of the terminated process may get reused....
|
||||||
self _disableProcessSwitching.
|
oldps := self _toggleProcessSwitching: false.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
0 -> startup <--- this should also be stored in the 'caller' variable.
|
0 -> startup <--- this should also be stored in the 'caller' variable.
|
||||||
@ -214,7 +214,7 @@ class System(Apex)
|
|||||||
|
|
||||||
System logNl: 'Requesting to terminate the caller process of id ' & (caller id) asString.
|
System logNl: 'Requesting to terminate the caller process of id ' & (caller id) asString.
|
||||||
caller terminate. // terminate the startup process.
|
caller terminate. // terminate the startup process.
|
||||||
self _enableProcessSwitching.
|
self _toggleProcessSwitching: oldps.
|
||||||
|
|
||||||
System logNl: '>>>>End of OS signal handler process ' & (thisProcess id) asString.
|
System logNl: '>>>>End of OS signal handler process ' & (thisProcess id) asString.
|
||||||
|
|
||||||
@ -229,8 +229,7 @@ class System(Apex)
|
|||||||
method(#class,#primitive) _getSigfd.
|
method(#class,#primitive) _getSigfd.
|
||||||
method(#class,#primitive) _setSig: signo.
|
method(#class,#primitive) _setSig: signo.
|
||||||
method(#class,#primitive) _halting.
|
method(#class,#primitive) _halting.
|
||||||
method(#class,#primitive) _enableProcessSwitching.
|
method(#class,#primitive) _toggleProcessSwitching: v.
|
||||||
method(#class,#primitive) _disableProcessSwitching.
|
|
||||||
method(#class,#primitive,#lenient) _findProcessById: id.
|
method(#class,#primitive,#lenient) _findProcessById: id.
|
||||||
method(#class,#primitive,#lenient) _findProcessByIdGreaterThan: id.
|
method(#class,#primitive,#lenient) _findProcessByIdGreaterThan: id.
|
||||||
|
|
||||||
|
@ -3260,17 +3260,26 @@ static moo_pfrc_t pf_system_return_value_to_context (moo_t* moo, moo_mod_t* mod,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------ */
|
||||||
static moo_pfrc_t pf_system_enable_process_switching (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
static moo_pfrc_t pf_system_toggle_process_switching (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
||||||
{
|
{
|
||||||
moo->no_proc_switch = 0;
|
moo_oop_t v;
|
||||||
MOO_STACK_SETRETTORCV (moo, nargs);
|
int oldnps;
|
||||||
return MOO_PF_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static moo_pfrc_t pf_system_disable_process_switching (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
oldnps = moo->no_proc_switch;
|
||||||
{
|
|
||||||
|
v = MOO_STACK_GETARG(moo, nargs, 0);
|
||||||
|
if (v == moo->_false)
|
||||||
|
{
|
||||||
|
/* disable process switching */
|
||||||
|
moo->no_proc_switch = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable process switching */
|
||||||
moo->no_proc_switch = 0;
|
moo->no_proc_switch = 0;
|
||||||
MOO_STACK_SETRETTORCV (moo, nargs);
|
}
|
||||||
|
|
||||||
|
MOO_STACK_SETRET (moo, nargs, (oldnps? moo->_false: moo->_true));
|
||||||
return MOO_PF_SUCCESS;
|
return MOO_PF_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4465,8 +4474,6 @@ static pf_t pftab[] =
|
|||||||
{ "System_calloc", { moo_pf_system_calloc, 1, 1 } },
|
{ "System_calloc", { moo_pf_system_calloc, 1, 1 } },
|
||||||
{ "System_calloc:", { moo_pf_system_calloc, 1, 1 } },
|
{ "System_calloc:", { moo_pf_system_calloc, 1, 1 } },
|
||||||
{ "System_collectGarbage", { moo_pf_system_collect_garbage, 0, 0 } },
|
{ "System_collectGarbage", { moo_pf_system_collect_garbage, 0, 0 } },
|
||||||
{ "System_disableProcessSwitching", { pf_system_disable_process_switching, 0, 0 } },
|
|
||||||
{ "System_enableProcessSwitching", { pf_system_enable_process_switching, 0, 0 } },
|
|
||||||
{ "System_findProcessById:", { pf_system_find_process_by_id, 1, 1 } },
|
{ "System_findProcessById:", { pf_system_find_process_by_id, 1, 1 } },
|
||||||
{ "System_findProcessByIdGreaterThan:", { pf_system_find_process_by_id_gt, 1, 1 } },
|
{ "System_findProcessByIdGreaterThan:", { pf_system_find_process_by_id_gt, 1, 1 } },
|
||||||
{ "System_free", { moo_pf_system_free, 1, 1 } },
|
{ "System_free", { moo_pf_system_free, 1, 1 } },
|
||||||
@ -4499,6 +4506,7 @@ static pf_t pftab[] =
|
|||||||
{ "System_putUint8", { moo_pf_system_put_uint8, 3, 3 } },
|
{ "System_putUint8", { moo_pf_system_put_uint8, 3, 3 } },
|
||||||
{ "System_return:to:", { pf_system_return_value_to_context, 2, 2 } },
|
{ "System_return:to:", { pf_system_return_value_to_context, 2, 2 } },
|
||||||
{ "System_setSig:", { moo_pf_system_set_sig, 1, 1 } },
|
{ "System_setSig:", { moo_pf_system_set_sig, 1, 1 } },
|
||||||
|
{ "System_toggleProcessSwitching:", { pf_system_toggle_process_switching, 1, 1 } },
|
||||||
|
|
||||||
{ "_dump", { pf_dump, 0, MA } },
|
{ "_dump", { pf_dump, 0, MA } },
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user