Patch title: Release 84 bulk changes
Abstract:
File: /pliant/language/os/process.pli
Key:
    Removed line
    Added line
module "/pliant/install/ring2.pli"
module "/pliant/language/stream/tcp.pli"
module "/pliant/language/schedule/threads_engine.pli"


function hook_function parameter fun
  arg Address parameter ; arg Function fun
  indirect

function process_wakeup
  var Int memo := pliant_execution_phase
  pliant_execution_phase := execution_phase_wakeup
  var Pointer:Arrow c :> pliant_wakeup_actions first
  while c<>null
    var Pointer:DelayedAction da :> c map DelayedAction
    hook_function da:parameter da:function
    c :> pliant_wakeup_actions next c
  pliant_execution_phase := memo

function process_shutdown
  var Int memo := pliant_execution_phase
  pliant_execution_phase := execution_phase_shutdown
  var Pointer:Arrow c :> pliant_shutdown_actions first
  var Pointer:Arrow c :> pliant_shutdown_actions last
  while c<>null
    var Pointer:DelayedAction da :> c map DelayedAction
    hook_function da:parameter da:function
    c :> pliant_shutdown_actions next c
    c :> pliant_shutdown_actions previous c
  pliant_execution_phase := memo


function process_exit retcode
  arg Int retcode
  pliant_execution_phase := execution_phase_exit
  var Pointer:Arrow c :> pliant_exit_actions first
  var Pointer:Arrow c :> pliant_exit_actions last
  while c<>null
    var Pointer:DelayedAction da :> c map DelayedAction
    hook_function da:parameter da:function
    c :> pliant_exit_actions next c
    c :> pliant_exit_actions previous c
  if os_api="linux"
    back_to_single_thread
  os_exit retcode


export process_shutdown process_exit