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

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

start()
{
	ebegin "Setting up CGroups"
	"${CGCONFIGPARSER}" "--load=${CG_CONFIGFILE}" "--load-directory=${CG_CONFIGDIR}" >/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 $(pgrep ''); do
		 ${CGCLASSIFY} ${pid} || einfo "Classifying ${pid} failed"
	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}"
}