#!/sbin/openrc-run
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

CGCONFIGPARSER="/usr/sbin/cgconfigparser"
CGCLASSIFY="/usr/sbin/cgclassify"
:	${CG_CONFIGFILE:=/etc/cgroup/cgconfig.conf}
description="Control Group Configuration Service"

start()
{
	ebegin "Setting up CGroups"
	${CGCONFIGPARSER} --load=${CG_CONFIGFILE} >/dev/null 2>&1
	eend "$?"
}

start_post()
{
	# Classify PID according to the rules if requested
	yesno "${CG_CLASSIFY}" || return 0
	ebegin "Classifying PID to CGroups"
	local pid
	for pid in $(ps --no-headers -eL o tid); do
		 ${CGCLASSIFY} ${pid}
	done
	eend "$?"
}

stop()
{
	cgconfig_umount
}

cgconfig_umount()
{
	local ctrl eq mnt_pnt mnt_pts

	while read ctrl eq mnt_pnt; do
		case "${ctrl}" in
			(\#*)    continue    ;;
			(mount*) mnt_pts=true;;
			(\}*)    mnt_pts=    ;;
			(*)
				[ -n "${mnt_pts}" ] || continue
				mnt_pnt="${mnt_pnt%;}"
				ebegin "Unmounting ${mnt_pnt}"
				umount "${mnt_pnt}"
				eend "$?"
				;;
		esac
	done < "${CG_CONFIGFILE}"
}
