#!/bin/sh

# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

JOB=$(basename "$0")

bootstat ui-post-stop
set +e
. /sbin/killers

# Terminate PKCS #11 services.
cryptohome --action=pkcs11_terminate

# Thaw any renderers that may have been left behind. If we
# have crashed while renderers are frozen, they'll be unkillable
# until we do this.
echo "THAWED" > "${CHROME_FREEZER_CGROUP_DIR}/to_be_frozen/freezer.state"

# Terminate any processes with files open on the mount point
# TODO(wad) parallelize with VFS/PID namespaces.
kill_with_open_files_on_path_and_mountpoints \
  '/home/[^.]|/data|/home/.shadow/[a-fA-F0-9]{40}/mount' "cryptohome" \
  /home/chronos/u-*

# Make sure everything is going down. No exceptions.
# The loop is so that clever daemons can't evade the kill by
# racing us and killing us first; we'll just try over and over
# until we win the race, and kill with pid -1 is atomic with
# respect to process creation.
while ! sudo -u chronos kill -9 -- -1 ; do
  sleep .1
done

# Check for still-living chronos processes and log their status.
ps -u chronos --no-headers -o pid,stat,args |
  logger -i -t "${JOB}-unkillable" -p crit

bootstat other-processes-terminated

# Android master containers use run_oci to terminate and clean up containers.
# If run_oci exists, let run_oci perform the task first before falling back to
# general cleanup. Note that the cleanup is done here only when session_manager
# (e.g. crashes and) fails to kill/destroy the containers.
for container in /run/containers/*-run_oci ; do
  # The '-run_oci' suffix above ensures that the run_oci commands below are
  # executed only for containers started by run_oci. When run_oci is not
  # installed in the rootfs, for example, these commands are never executed.
  if [ -d "${container}" ]; then
    run_oci --signal=KILL kill "${container##*/}"
    NUM_RETRIES=3
    for i in $(seq ${NUM_RETRIES}) ; do
      # Both sleep and polling are needed here because 'run_oci destroy' fails
      # if the container process is still alive.
      sleep 1
      run_oci destroy "${container##*/}" && break
      if [ ${i} = ${NUM_RETRIES} ]; then
        logger -i -p crit "Failed to destroy ${container##*/}"
      fi
    done
  fi
done

# If there are any orphaned containers, they should also be cleaned up.
# This needs to be done prior to cryptohome unmounting so that there are no
# remaining processes with files open that would prevent a clean unmount.
for container in /run/containers/* ; do
  if [ -d "${container}" ]; then
    kill_with_open_files_on "${container##*/}" "${container}/root"
    umount -R "${container}/root"
    rm -rf "${container}"
  fi
done

cryptohome --action=unmount
bootstat cryptohome-unmounted
