#!/bin/sh

[ -z "$__rtrap_name__" ] && {
	export __rtrap_name__="$(basename $0)"
	export __rtrap_path__="$0"
	export __rtrap_lockno__=0
	[ ! -f /bin/lock ] && [ ! -f /var/run/rtm_lock_warning ] && {
		touch /var/run/rtm_lock_warning
		echo "$(date) lock is not provide!!" >>"/var/log/wrtmgr.log"
	}
}

rtmgr_trap_cb() {
	local signal="$1"
	local lockfile="$2"

	echo "`date` pid:$$ script:$__rtrap_path__ sig $signal detected" >>/var/log/rtmgr_shell.log
	lock -u $lockfile
}

rtmgr_trap() {
	which trap || return

	trap "rtmgr_trap_cb int $1" INT
	trap "rtmgr_trap_cb term $1" TERM
	trap "rtmgr_trap_cb abort $1" ABRT
	trap "rtmgr_trap_cb quit $1" QUIT
	trap "rtmgr_trap_cb alarm $1" ALRM
}

# shell is single process?
rtmgr_lock() {
	export __rtrap_lockno__=$((__rtrap_lockno__ + 1))
	local lockfile="/var/run/rtmgr_shell${__rtrap_lockno__}_${__rtrap_name__}.lock"

	lock $lockfile
	rtmgr_trap "$lockfile"
}

rtmgr_unlock() {
	lock -u "/var/run/rtmgr_shell${__rtrap_lockno__}_${__rtrap_name__}.lock"
	export __rtrap_lockno__=$((__rtrap_lockno__ - 1))
}

rtmgr_f_trylock() {
	local ret

	[ -z "$1" ] && {
		echo "lock path null"
		return
	}

	if lock -n "$1";then
		rtmgr_trap "$1"
		ret=0
	else
		ret=1
	fi

	return $ret
}

rtmgr_f_lock() {
	[ -z "$1" ] && {
		echo "lock path null"
		return
	}

	lock "$1"
	rtmgr_trap "$1"
}

rtmgr_f_unlock() {
	[ -z "$1" ] && {
		echo "lock path null"
		return
	}

	lock -u "$1"
}