Patch title: Release 90 bulk changes
Abstract:
File: /linux/kernel/shutdown.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream.pli"
module "/pliant/linux/storage/filesystem.pli"
module "/pliant/language/stream/handle.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream.pli"
module "/pliant/linux/storage/filesystem.pli"
module "/pliant/language/stream/handle.pli"
module "/pliant/linux/network/net.pli"


constant os_VT_ACTIVATE 5606h


function kernel_shutdown reboot
  arg CBool reboot
  for (var Int lap) 1 2


function kernel_shutdown reboot
  arg CBool reboot
  for (var Int lap) 1 2
    os_sync
    var Array:FileInfo all := file_list "file:/proc/" standa
    for (var Int i) 0 all:size-1
      if (all:i:name parse (var Int pid) "/")
        (var Stream s) open "file:/proc/"+string:pid+"/statu
        var Str name := "" ; var Int ppid := undefined
        while not s:atend
          var Str l := s readline      
          if (l parse "Name:" any:(var Str str))
            name := str
          if (l parse "PPid:" (var Int num))
            ppid := num
        s close
        if name<>"pliant" or ppid<>1
          os_kill pid (shunt lap=1 os_SIGTERM os_SIGKILL)
    sleep 2
    var Array:FileInfo all := file_list "file:/proc/" standa
    for (var Int i) 0 all:size-1
      if (all:i:name parse (var Int pid) "/")
        (var Stream s) open "file:/proc/"+string:pid+"/statu
        var Str name := "" ; var Int ppid := undefined
        while not s:atend
          var Str l := s readline      
          if (l parse "Name:" any:(var Str str))
            name := str
          if (l parse "PPid:" (var Int num))
            ppid := num
        s close
        if name<>"pliant" or ppid<>1
          os_kill pid (shunt lap=1 os_SIGTERM os_SIGKILL)
    sleep 2
    os_sync
  var Int maxi := stream_maximum_handle+stream_pending_handl
  for (var Int h) 3 maxi
    os_close h
  var Int maxi := stream_maximum_handle+stream_pending_handl
  for (var Int h) 3 maxi
    os_close h
  os_sync
  (var Stream s) open "file:/proc/mounts" in+safe
  while not s:atend
    if (s:readline parse any:(var Str device) _ any:(var Str
      if path<>"/proc"
        if (filesystem_mount "file:"+device "file:"+path "re
          console "failed to remount " path " readonly." eol
  s close
  (var Stream s) open "file:/proc/mounts" in+safe
  while not s:atend
    if (s:readline parse any:(var Str device) _ any:(var Str
      if path<>"/proc"
        if (filesystem_mount "file:"+device "file:"+path "re
          console "failed to remount " path " readonly." eol
  s close
  (var Stream s) open "file:/proc/net/dev" in+safe
  while not s:atend
    if (s:readline parse any:(var Str device) ":" any)
      net_shutdown device
  s close
  os_ioctl 0 os_VT_ACTIVATE (cast 1 Address)
  console character:27+"[lb]2J"
  os_sync
  if reboot
    os_reboot 0FEE1DEADh 672274793 1234567h null
  else
    os_reboot 0FEE1DEADh 672274793 4321FEDCh null
    os_reboot 0FEE1DEADh 672274793 0CDEF0123h null

export kernel_shutdown
  os_sync
  if reboot
    os_reboot 0FEE1DEADh 672274793 1234567h null
  else
    os_reboot 0FEE1DEADh 672274793 4321FEDCh null
    os_reboot 0FEE1DEADh 672274793 0CDEF0123h null

export kernel_shutdown