public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in net-misc/asterisk/files/1.6.1: asterisk-1.6.1.6-transfer-segfault.patch asterisk.initd asterisk-1.6.1.6-fxsks-hookstate.patch
@ 2009-10-22 14:47 Tony Vroon (chainsaw)
  0 siblings, 0 replies; only message in thread
From: Tony Vroon (chainsaw) @ 2009-10-22 14:47 UTC (permalink / raw
  To: gentoo-commits

chainsaw    09/10/22 14:47:56

  Added:                asterisk-1.6.1.6-transfer-segfault.patch
                        asterisk.initd
                        asterisk-1.6.1.6-fxsks-hookstate.patch
  Log:
  Revision bump. Init script now depends on dahdi, not zaptel (bug #279436). FXO ports can now carry outbound calls immediately, without requiring an inbound call first (bug #281467) and transferring queue calls no longer segfaults. With thanks to Jaco Kroon. Troublesome H323 support removed due to pwlib dependency in openh323 (bug #290065) and IMAP support removed as it never worked right (bug #265567). Bug reports on either only accepted with patches.
  (Portage version: 2.1.7.1/cvs/Linux x86_64)

Revision  Changes    Path
1.1                  net-misc/asterisk/files/1.6.1/asterisk-1.6.1.6-transfer-segfault.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk-1.6.1.6-transfer-segfault.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk-1.6.1.6-transfer-segfault.patch?rev=1.1&content-type=text/plain

Index: asterisk-1.6.1.6-transfer-segfault.patch
===================================================================
Index: asterisk-1.6.1.0~dfsg_devel/channels/chan_sip.c
===================================================================
--- asterisk-1.6.1.0~dfsg_devel.orig/channels/chan_sip.c	2009-10-14 12:03:08.000000000 +0200
+++ asterisk-1.6.1.0~dfsg_devel/channels/chan_sip.c	2009-10-14 12:03:11.000000000 +0200
@@ -5333,15 +5333,12 @@
 				 * to lock the bridge. This may get hairy...
 				 */
 				while (bridge && ast_channel_trylock(bridge)) {
-					struct ast_channel *chan = p->owner;
 					sip_pvt_unlock(p);
 					do {
-						/* Use chan since p->owner could go NULL on us
-						 * while p is unlocked
-						 */
-						CHANNEL_DEADLOCK_AVOIDANCE(chan);
+						/* Use oldowner since p->owner is already NULL */
+						CHANNEL_DEADLOCK_AVOIDANCE(oldowner);
 					} while (sip_pvt_trylock(p));
-					bridge = p->owner ? ast_bridged_channel(p->owner) : NULL;
+					bridge = ast_bridged_channel(oldowner);
 				}
 
 				if (p->rtp)



1.1                  net-misc/asterisk/files/1.6.1/asterisk.initd

file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk.initd?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk.initd?rev=1.1&content-type=text/plain

Index: asterisk.initd
===================================================================
#!/sbin/runscript
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk.initd,v 1.1 2009/10/22 14:47:55 chainsaw Exp $

opts="${opts} forcestop reload"

depend() {
	need net
	use nscd dns dahdi mysql postgresql slapd capi
}

is_running() {
	if [ -z "$(pidof asterisk)" ]; then
		return 1
	else
		PID="$(cat /var/run/asterisk/asterisk.pid)"
		for x in $(pidof asterisk); do
			if [ "${x}" = "${PID}" ]; then
				return 0
			fi	
		done
	fi

	return 1
}

asterisk_run_loop() {
	local OPTS ARGS MSG NICE=""
	local result=0 signal=0

	# default options
	OPTS="-f"  # don't fork / detach breaks wrapper script...

	# filter (redundant) arguments
	ARGS="$(echo "${@}" | sed -e "s:-c\|-f::g")"

	# mangle yes/no options
	ASTERISK_CONSOLE="$(echo ${ASTERISK_CONSOLE} | tr '[:lower:]' '[:upper:]')"

	if [ -n "${ASTERISK_CORE_SIZE}" ] &&
	   [ "${ASTERISK_CORE_SIZE}" != "0" ]; then
		ulimit -c ${ASTERISK_CORE_SIZE}

		if [ -n "${ASTERISK_CORE_DIR}" ] && \
		   [ ! -d "${ASTERISK_CORE_DIR}" ]
		then
			mkdir -m750 -p "${ASTERISK_CORE_DIR}"

			if [ -n "${ASTERISK_USER}" ]; then
				chown -R "${ASTERISK_USER}" "${ASTERISK_CORE_DIR}"
			fi
		fi
		ASTERISK_CORE_DIR="${ASTERISK_CORE_DIR:-/tmp}"

		cd "${ASTERISK_CORE_DIR}"
		echo "   Core dump size            : ${ASTERISK_CORE_SIZE}"
		echo "   Core dump location        : ${ASTERISK_CORE_DIR}"
	fi

	if [ -n "${ASTERISK_MAX_FD}" ]; then
		ulimit -n ${ASTERISK_MAX_FD}
		echo "   Max open filedescriptors  : ${ASTERISK_MAX_FD}"
	fi

	if [ -n "${ASTERISK_NICE}" ]; then
		echo "   Nice level                : ${ASTERISK_NICE}"
		NICE="nice -n ${ASTERISK_NICE} --"
	fi

	if [ -n "${ASTERISK_NOTIFY_EMAIL}" ]; then
		if [ -x /usr/sbin/sendmail ]; then
			echo "   Email notifications go to : ${ASTERISK_NOTIFY_EMAIL}"
		else
			echo "   Notifications disabled, /usr/sbin/sendmail doesn't exist or is not executable!"
			unset ASTERISK_NOTIFY_EMAIL
		fi
	fi

	if [ -n "${ASTERISK_TTY}" ]; then
		for x in ${ASTERISK_TTY} \
			 /dev/tty${ASTERISK_TTY} \
			 /dev/vc/${ASTERISK_TTY}
		do
			if [ -c "${x}" ]; then
				TTY="${x}"
			fi
		done
		[ -n "${TTY}" ] && \
			echo "   Messages are sent to      : ${TTY}"
	fi

	if [ "${ASTERISK_CONSOLE}" = "YES" ] && [ -n "${TTY}" ]; then
		echo "   Starting Asterisk console : ${ASTERISK_CONSOLE}"
		OPTS="${OPTS} -c"
	fi

	OPTS="${OPTS} ${ARGS}"

	while :; do

		if [ -n "${TTY}" ]; then
			/usr/bin/stty -F ${TTY} sane
			${NICE} /usr/sbin/asterisk ${OPTS} >${TTY} 2>&1 <${TTY}
			result=$?
		else
			${NICE} /usr/sbin/asterisk ${OPTS} &>/dev/null
			result=$?
		fi		

		if [ $result -eq 0 ]; then
			echo "Asterisk terminated normally"
			break
		else
			if [ $result -gt 128 ]; then
				signal=$((result -  128))
				MSG="Asterisk terminated with Signal: $signal"

				CORE_TARGET="core-$(date "+%Y%m%d-%h%M%s")"

				local CORE_DUMPED=0
				if [ -f "${ASTERISK_CORE_DIR}/core" ]; then
					mv "${ASTERISK_CORE_DIR}/core" \
					   "${ASTERISK_CORE_DIR}/${CORE_TARGET}"
					CORE_DUMPED=1

				elif [ -f "${ASTERISK_CORE_DIR}/core.${PID}" ]; then
					mv "${ASTERISK_CORE_DIR}/core.${PID}" \
					   "${ASTERISK_CORE_DIR}/${CORE_TARGET}"
					CORE_DUMPED=1

				fi

				[ $CORE_DUMPED -eq 1 ] && \
					MSG="${MSG}\n\rCore dumped: ${ASTERISK_CORE_DIR}/${CORE_TARGET}"
			else
				MSG="Asterisk terminated with return code: $result"
			fi

			# kill left-over tasks
			for X in ${ASTERISK_CLEANUP_ON_CRASH}; do
				kill -9 $(pidof ${X});
			done
		fi

		[ -n "${TTY}" ] \
			&& echo "${MSG}" >${TTY} \
			|| echo "${MSG}"


		if [ -n "${ASTERISK_NOTIFY_EMAIL}" ] && \
		   [ -x /usr/sbin/sendmail ]; then
			echo -e -n "Subject: Asterisk crashed\n\r${MSG}\n\r" |\
				 /usr/sbin/sendmail "${ASTERISK_NOTIFY_EMAIL}"
		fi
		sleep 5
		echo "Restarting Asterisk..."
	done
	return 0
}

start() {
	local OPTS USER GROUP PID
	local tmp x

	if [ -n "${ASTERISK_NICE}" ]; then
		if [ ${ASTERISK_NICE} -ge -20 ] && \
		   [ ${ASTERISK_NICE} -le  19 ]; then 
			OPTS="--nicelevel ${ASTERISK_NICE}"
		else
			eerror "Nice value must be between -20 and 19"
			return 1
		fi
	fi

	if [ -n "${ASTERISK_USER}" ]; then
		USER=$(echo $ASTERISK_USER | sed 's/:.*//')
		GROUP=$(echo $ASTERISK_USER | awk -F: '/.*:.*/ { print $2 }')
		if [ -n "${USER}" ]; then
			ASTERISK_OPTS="${ASTERISK_OPTS} -U ${USER}"
		fi
		if [ -n "${GROUP}" ]; then
			ASTERISK_OPTS="${ASTERISK_OPTS} -G ${GROUP}"
			GROUP=":${GROUP}"	# make it look nice...
		fi
		ebegin "Starting asterisk PBX (as ${USER}${GROUP})"
	else
		ebegin "Starting asterisk PBX (as root)"
	fi

	if [ "$(echo ${ASTERISK_WRAPPER} | tr '[:upper:]' '[:lower:]')" != "yes" ]; then
		start-stop-daemon --start --exec /usr/sbin/asterisk \
			${OPTS} -- ${ASTERISK_OPTS}
		result=$?
	else
		asterisk_run_loop ${ASTERISK_OPTS} 2>/dev/null &
		result=$?
	fi

	if [ $result -eq 0 ]; then
		# 2 seconds should be enough for asterisk to start
		sleep 2 
		is_running
		result=$?
	fi

	eend $result
}

forcestop() {
	ebegin "Stopping asterisk PBX"
	start-stop-daemon --stop --pidfile /var/run/asterisk/asterisk.pid
	eend $?
}

stop() {
	if ! is_running; then
		eerror "Asterisk is not running!"
		return 0
	fi

	ebegin "Stopping asterisk PBX gracefully"
	/usr/sbin/asterisk -r -x "core stop gracefully" &>/dev/null
	# Now we have to wait until asterisk has _really_ stopped.
	sleep 1
	if is_running; then
		einfon "Waiting for asterisk to shutdown ."
		local cnt=0
		while is_running; do
			cnt=`expr $cnt + 1`
			if [ $cnt -gt 60 ] ; then
				# Waited 120 seconds now. Fail.
				echo
				eend 1 "Failed."
				return
			fi
			sleep 2
			echo -n "."
		done
		echo
	fi
	eend 0
}

reload() {
	if is_running; then
		ebegin "Forcing asterisk to reload configuration"
		/usr/sbin/asterisk -r -x "reload" &>/dev/null
		eend $?
	else
		eerror "Asterisk is not running!"
	fi
}



1.1                  net-misc/asterisk/files/1.6.1/asterisk-1.6.1.6-fxsks-hookstate.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk-1.6.1.6-fxsks-hookstate.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/net-misc/asterisk/files/1.6.1/asterisk-1.6.1.6-fxsks-hookstate.patch?rev=1.1&content-type=text/plain

Index: asterisk-1.6.1.6-fxsks-hookstate.patch
===================================================================
Allow FXO channels to send out calls even before someone calls in through 
them.

This rxisoffhook does not work. Before 1.6.0 it was wrapped in a #ifdef
DAHDI_CHECK_HOOKSTATE (or rather: ZAP_CHECK_HOOKSTATE). In 1.6 it is 
accidentally enabled by default.

On DAHDI (the kernel) this field is not properly initialized at startup. 
And thus it will only work after an incoming ring.

Upstream issue: http://issues.asterisk.org/view.php?id=14577

--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -9295,12 +9295,16 @@ static inline int available(struct dahdi
 				/* When "onhook" that means no battery on the line, and thus
 				  it is out of service..., if it's on a TDM card... If it's a channel
 				  bank, there is no telling... */
+#ifdef DAHDI_CHECK_HOOKSTATE
 				if (par.rxbits > -1)
 					return 1;
 				if (par.rxisoffhook)
 					return 1;
 				else
 					return 0;
+#else
+				return 1;
+#endif
 			} else if (par.rxisoffhook) {
 				ast_debug(1, "Channel %d off hook, can't use\n", p->channel);
 				/* Not available when the other end is off hook */






^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-10-22 14:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-22 14:47 [gentoo-commits] gentoo-x86 commit in net-misc/asterisk/files/1.6.1: asterisk-1.6.1.6-transfer-segfault.patch asterisk.initd asterisk-1.6.1.6-fxsks-hookstate.patch Tony Vroon (chainsaw)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox