From owner-svn-ports-all@freebsd.org Wed Dec 30 22:44:38 2015 Return-Path: Delivered-To: svn-ports-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 08FD3A568A1; Wed, 30 Dec 2015 22:44:38 +0000 (UTC) (envelope-from olgeni@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BDE5A138B; Wed, 30 Dec 2015 22:44:37 +0000 (UTC) (envelope-from olgeni@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id tBUMiaMQ046261; Wed, 30 Dec 2015 22:44:36 GMT (envelope-from olgeni@FreeBSD.org) Received: (from olgeni@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id tBUMiaqj046259; Wed, 30 Dec 2015 22:44:36 GMT (envelope-from olgeni@FreeBSD.org) Message-Id: <201512302244.tBUMiaqj046259@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: olgeni set sender to olgeni@FreeBSD.org using -f From: Jimmy Olgeni Date: Wed, 30 Dec 2015 22:44:36 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r404880 - in head/net/rabbitmq: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Dec 2015 22:44:38 -0000 Author: olgeni Date: Wed Dec 30 22:44:36 2015 New Revision: 404880 URL: https://svnweb.freebsd.org/changeset/ports/404880 Log: Avoid calling "rabbitmqctl status" in a loop to make sure that RabbitMQ is started. "rabbitmqctl wait" alone should suffice, and the loop seems to cause some kind of race condition that causes a segfault in the Erlang VM. RabbitMQ would start anyway, but users would get a segmentation fault message on the console. We also wait on daemon(8)'s pid to make sure that restarts are synchronized (i.e. daemon(8) is stopped before starting it again with the same pidfile). PR: 204147 Submitted by: elofu17@hotmail.com Modified: head/net/rabbitmq/Makefile head/net/rabbitmq/files/rabbitmq.in Modified: head/net/rabbitmq/Makefile ============================================================================== --- head/net/rabbitmq/Makefile Wed Dec 30 22:05:04 2015 (r404879) +++ head/net/rabbitmq/Makefile Wed Dec 30 22:44:36 2015 (r404880) @@ -3,6 +3,7 @@ PORTNAME= rabbitmq PORTVERSION= 3.5.7 +PORTREVISION= 1 CATEGORIES= net MASTER_SITES= http://www.rabbitmq.com/releases/rabbitmq-server/v${PORTVERSION}/ DISTNAME= ${PORTNAME}-server-${PORTVERSION} Modified: head/net/rabbitmq/files/rabbitmq.in ============================================================================== --- head/net/rabbitmq/files/rabbitmq.in Wed Dec 30 22:05:04 2015 (r404879) +++ head/net/rabbitmq/files/rabbitmq.in Wed Dec 30 22:44:36 2015 (r404880) @@ -25,6 +25,7 @@ load_rc_config $name rabbitmq_server="%%PREFIX%%/sbin/rabbitmq-server" rabbitmq_ctl="%%PREFIX%%/sbin/rabbitmqctl" pidfile="/var/run/${name}.pid" +daemon_pidfile="/var/run/${name}-daemon.pid" start_cmd="${name}_start" stop_cmd="${name}_stop" @@ -46,35 +47,18 @@ rabbitmq_start() chown -R ${rabbitmq_user}:${rabbitmq_user} ${RABBITMQ_HOME} fi - env HOME=${RABBITMQ_HOME} daemon -c -f -u ${rabbitmq_user} -p ${pidfile} ${rabbitmq_server} - - local _attempt=10 - - while [ ${_attempt} -gt 0 ]; do - debug "Running: rabbitmqctl status (${_attempt})" - $rabbitmq_ctl status > /dev/null 2>&1 && break - _attempt=$((${_attempt} - 1)) - sleep 1 - done - - if [ ${_attempt} -gt 0 ]; then - debug "Running: rabbitmqctl wait ${pidfile}" - $rabbitmq_ctl wait ${pidfile} >/dev/null 2>&1 - fi + env HOME=${RABBITMQ_HOME} daemon -c -f -u ${rabbitmq_user} -p ${pidfile} -P ${daemon_pidfile} ${rabbitmq_server} + debug "Running: rabbitmqctl wait ${pidfile}" + ${rabbitmq_ctl} wait ${pidfile} >/dev/null 2>&1 } rabbitmq_stop() { echo "Stopping ${name}." - - debug "Running: ${rabbitmq_ctl} stop" - - su -m ${rabbitmq_user} -c "sh -c \"${rabbitmq_ctl} stop\"" >/dev/null 2>&1 - - if [ -f ${pidfile} ]; then - read rc_pid < ${pidfile} - wait_for_pids $rc_pid - fi + [ -f ${daemon_pidfile} ] && read daemon_pid < ${daemon_pidfile} + debug "Running: ${rabbitmq_ctl} stop ${pidfile}" + su -m ${rabbitmq_user} -c "sh -c \"${rabbitmq_ctl} stop ${pidfile}\"" >/dev/null 2>&1 + [ -n "${daemon_pid}" ] && wait_for_pids ${daemon_pid} } run_rc_command "$1"