diff options
author | Steve Powell <steve@rabbitmq.com> | 2012-02-17 11:24:57 +0000 |
---|---|---|
committer | Steve Powell <steve@rabbitmq.com> | 2012-02-17 11:24:57 +0000 |
commit | d007ae49c8964a362b915eb8ddeb0b202c1ada32 (patch) | |
tree | 60a8d0665ada56aa39830d51d6b61d758f91df3d | |
parent | c5ab372f6cbdd4050646a6aa75d9bf3241928177 (diff) | |
parent | 680400fc52045d28cf1b2f9e1123a59e12e2a0d9 (diff) | |
download | rabbitmq-server-d007ae49c8964a362b915eb8ddeb0b202c1ada32.tar.gz |
Merge 24748 in to get renaming of portfile variable.
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | packaging/RPMS/Fedora/Makefile | 21 | ||||
-rw-r--r-- | packaging/debs/Debian/Makefile | 15 | ||||
-rw-r--r-- | packaging/generic-unix/Makefile | 5 | ||||
-rw-r--r-- | packaging/generic-unix/rabbitmq-sys | 34 | ||||
-rw-r--r-- | packaging/macports/Makefile | 5 | ||||
-rw-r--r-- | packaging/macports/Portfile.in | 14 | ||||
-rwxr-xr-x | packaging/macports/make-port-diff.sh | 3 | ||||
-rw-r--r-- | packaging/windows/Makefile | 2 | ||||
-rwxr-xr-x | scripts/rabbitmq-env | 30 | ||||
-rw-r--r-- | scripts/rabbitmq-sys | 33 | ||||
-rw-r--r-- | src/rabbit_amqqueue_process.erl | 19 | ||||
-rw-r--r-- | src/rabbit_misc.erl | 15 | ||||
-rw-r--r-- | src/rabbit_node_monitor.erl | 21 | ||||
-rw-r--r-- | src/rabbit_reader.erl | 20 |
15 files changed, 156 insertions, 85 deletions
@@ -316,7 +316,7 @@ install_bin: all install_dirs cp -r ebin include LICENSE* INSTALL $(TARGET_DIR) chmod 0755 scripts/* - for script in rabbitmq-env rabbitmq-server rabbitmqctl rabbitmq-plugins; do \ + for script in rabbitmq-env rabbitmq-server rabbitmqctl rabbitmq-plugins rabbitmq-sys; do \ cp scripts/$$script $(TARGET_DIR)/sbin; \ [ -e $(SBIN_DIR)/$$script ] || ln -s $(SCRIPTS_REL_PATH)/$$script $(SBIN_DIR)/$$script; \ done @@ -347,7 +347,7 @@ $(foreach XML,$(USAGES_XML),$(eval $(call usage_dep, $(XML)))) # Note that all targets which depend on clean must have clean in their # name. Also any target that doesn't depend on clean should not have # clean in its name, unless you know that you don't need any of the -# automatic dependency generation for that target (eg cleandb). +# automatic dependency generation for that target (e.g. cleandb). # We want to load the dep file if *any* target *doesn't* contain # "clean" - i.e. if removing all clean-like targets leaves something diff --git a/packaging/RPMS/Fedora/Makefile b/packaging/RPMS/Fedora/Makefile index c67d8fd6..2031de4d 100644 --- a/packaging/RPMS/Fedora/Makefile +++ b/packaging/RPMS/Fedora/Makefile @@ -26,20 +26,23 @@ prepare: mkdir -p BUILD SOURCES SPECS SRPMS RPMS tmp cp $(TARBALL_DIR)/$(TARBALL) SOURCES cp rabbitmq-server.spec SPECS - sed -i 's|%%VERSION%%|$(VERSION)|;s|%%REQUIRES%%|$(REQUIRES)|' \ - SPECS/rabbitmq-server.spec + sed -e 's|%%VERSION%%|$(VERSION)|;s|%%REQUIRES%%|$(REQUIRES)|' \ + SPECS/rabbitmq-server.spec >SPECS/rabbitmq-server.spec.tmp \ + && mv SPECS/rabbitmq-server.spec.tmp SPECS/rabbitmq-server.spec cp ${COMMON_DIR}/* SOURCES/ - sed -i \ - -e 's|^LOCK_FILE=.*$$|LOCK_FILE=/var/lock/subsys/$$NAME|' \ - SOURCES/rabbitmq-server.init + sed -e 's|^LOCK_FILE=.*$$|LOCK_FILE=/var/lock/subsys/$$NAME|' \ + SOURCES/rabbitmq-server.init >SOURCES/rabbitmq-server.init.tmp \ + && mv SOURCES/rabbitmq-server.init.tmp SOURCES/rabbitmq-server.init ifeq "$(RPM_OS)" "fedora" # Fedora says that only vital services should have Default-Start - sed -i -e '/^# Default-Start:/d;/^# Default-Stop:/d' \ - SOURCES/rabbitmq-server.init + sed -e '/^# Default-Start:/d;/^# Default-Stop:/d' \ + SOURCES/rabbitmq-server.init >SOURCES/rabbitmq-server.init.tmp \ + && mv SOURCES/rabbitmq-server.init.tmp SOURCES/rabbitmq-server.init endif - sed -i -e 's|@SU_RABBITMQ_SH_C@|su rabbitmq -s /bin/sh -c|' \ - SOURCES/rabbitmq-script-wrapper + sed -e 's|@SU_RABBITMQ_SH_C@|su rabbitmq -s /bin/sh -c|' \ + SOURCES/rabbitmq-script-wrapper >SOURCES/rabbitmq-script-wrapper.tmp \ + && mv SOURCES/rabbitmq-script-wrapper.tmp SOURCES/rabbitmq-script-wrapper cp rabbitmq-server.logrotate SOURCES/rabbitmq-server.logrotate server: prepare diff --git a/packaging/debs/Debian/Makefile b/packaging/debs/Debian/Makefile index 79e9c1dd..de9cf400 100644 --- a/packaging/debs/Debian/Makefile +++ b/packaging/debs/Debian/Makefile @@ -24,13 +24,14 @@ package: clean cp $(COMMON_DIR)/* $(UNPACKED_DIR)/debian/ # Debian and descendants differ from most other distros in that # runlevel 2 should start network services. - sed -i \ - -e 's|^LOCK_FILE=.*$$|LOCK_FILE=|' \ - -e 's|^\(# Default-Start:\).*$$|\1 2 3 4 5|' \ - -e 's|^\(# Default-Stop:\).*$$|\1 0 1 6|' \ - $(UNPACKED_DIR)/debian/rabbitmq-server.init - sed -i -e 's|@SU_RABBITMQ_SH_C@|su rabbitmq -s /bin/sh -c|' \ - $(UNPACKED_DIR)/debian/rabbitmq-script-wrapper + sed -e 's|^LOCK_FILE=.*$$|LOCK_FILE=|' \ + -e 's|^\(# Default-Start:\).*$$|\1 2 3 4 5|' \ + -e 's|^\(# Default-Stop:\).*$$|\1 0 1 6|' \ + $(UNPACKED_DIR)/debian/rabbitmq-server.init >$(UNPACKED_DIR)/debian/rabbitmq-server.init.tmp \ + && mv $(UNPACKED_DIR)/debian/rabbitmq-server.init.tmp $(UNPACKED_DIR)/debian/rabbitmq-server.init + sed -e 's|@SU_RABBITMQ_SH_C@|su rabbitmq -s /bin/sh -c|' \ + $(UNPACKED_DIR)/debian/rabbitmq-script-wrapper >$(UNPACKED_DIR)/debian/rabbitmq-script-wrapper.tmp \ + && mv $(UNPACKED_DIR)/debian/rabbitmq-script-wrapper.tmp $(UNPACKED_DIR)/debian/rabbitmq-script-wrapper chmod a+x $(UNPACKED_DIR)/debian/rules echo "This package was debianized by Tony Garnock-Jones <tonyg@rabbitmq.com> on\nWed, 3 Jan 2007 15:43:44 +0000.\n\nIt was downloaded from http://www.rabbitmq.com/\n\n" > $(UNPACKED_DIR)/debian/copyright cat $(UNPACKED_DIR)/LICENSE >> $(UNPACKED_DIR)/debian/copyright diff --git a/packaging/generic-unix/Makefile b/packaging/generic-unix/Makefile index b5c342aa..9014c3ad 100644 --- a/packaging/generic-unix/Makefile +++ b/packaging/generic-unix/Makefile @@ -12,6 +12,11 @@ dist: MAN_DIR=`pwd`/$(TARGET_DIR)/share/man \ install + cp -f rabbitmq-sys $(TARGET_DIR)/sbin + chmod 0755 $(TARGET_DIR)/sbin/rabbitmq-sys + + mkdir -p $(TARGET_DIR)/etc/rabbitmq + tar -zcf $(TARGET_TARBALL).tar.gz $(TARGET_DIR) rm -rf $(SOURCE_DIR) $(TARGET_DIR) diff --git a/packaging/generic-unix/rabbitmq-sys b/packaging/generic-unix/rabbitmq-sys new file mode 100644 index 00000000..a89ed33f --- /dev/null +++ b/packaging/generic-unix/rabbitmq-sys @@ -0,0 +1,34 @@ +#!/bin/sh +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at http://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is VMware, Inc. +## Copyright (c) 2012 VMware, Inc. All rights reserved. +## + +### generic-unix ### +### next line potentially updated in package install steps +SYS_PREFIX=${RABBITMQ_HOME} + +## Set system default values +SERVER_ERL_ARGS="+K true +A30 +P 1048576 \ +-kernel inet_default_connect_options [{nodelay,true}]" + +CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq +LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq +MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia +ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins + +OLD_CONF_ENV_FILE=/etc/rabbitmq/rabbitmq.conf +CONF_ENV_FILE=/etc/rabbitmq/rabbitmq-env.conf + +PLUGINS_DIR="${RABBITMQ_HOME}/plugins" diff --git a/packaging/macports/Makefile b/packaging/macports/Makefile index 47da02dc..897fc183 100644 --- a/packaging/macports/Makefile +++ b/packaging/macports/Makefile @@ -38,9 +38,8 @@ $(DEST)/Portfile: Portfile.in # needs vars such as HOME to be set. So we have to set them # explicitly. macports: dirs $(DEST)/Portfile - cp $(COMMON_DIR)/rabbitmq-script-wrapper $(DEST)/files - sed -i -e 's|@SU_RABBITMQ_SH_C@|SHELL=/bin/sh HOME=/var/lib/rabbitmq USER=rabbitmq LOGNAME=rabbitmq PATH="$$(eval `PATH=MACPORTS_PREFIX/bin /usr/libexec/path_helper -s`; echo $$PATH)" su -m rabbitmq -c|' \ - $(DEST)/files/rabbitmq-script-wrapper + sed -e 's|@SU_RABBITMQ_SH_C@|SHELL=/bin/sh HOME=/var/lib/rabbitmq USER=rabbitmq LOGNAME=rabbitmq PATH="$$(eval `PATH=@MACPORTS_PREFIX@/bin /usr/libexec/path_helper -s`; echo $$PATH)" su -m rabbitmq -c|' \ + $(COMMON_DIR)/rabbitmq-script-wrapper >$(DEST)/files/rabbitmq-script-wrapper cp patch-org.macports.rabbitmq-server.plist.diff $(DEST)/files if [ -n "$(MACPORTS_USERHOST)" ] ; then \ tar cf - -C $(MACPORTS_DIR) . | ssh $(SSH_OPTS) $(MACPORTS_USERHOST) ' \ diff --git a/packaging/macports/Portfile.in b/packaging/macports/Portfile.in index 6519b2bd..f6049468 100644 --- a/packaging/macports/Portfile.in +++ b/packaging/macports/Portfile.in @@ -90,18 +90,14 @@ post-destroot { xinstall -d -g [existsgroup ${servergroup}] -m 775 ${destroot}${serverhome} xinstall -d -g [existsgroup ${servergroup}] -m 775 ${destroot}${mnesiadbdir} - reinplace -E "s:(/etc/rabbitmq/rabbitmq):${prefix}\\1:g" \ - ${realsbin}/rabbitmq-env - foreach var {CONFIG_FILE LOG_BASE MNESIA_BASE ENABLED_PLUGINS_FILE} { - reinplace -E "s:^($var)=/:\\1=${prefix}/:" \ - ${realsbin}/rabbitmq-server \ - ${realsbin}/rabbitmqctl \ - ${realsbin}/rabbitmq-plugins - } + reinplace -E "s:^SYS_PREFIX=\${RABBITMQ_HOME}$:SYS_PREFIX=${prefix}:" \ + ${realsbin}/rabbitmq-sys + reinplace -E "s:^SYS_PREFIX=$:SYS_PREFIX=${prefix}:" \ + ${realsbin}/rabbitmq-sys xinstall -m 555 ${filespath}/rabbitmq-script-wrapper \ ${wrappersbin}/rabbitmq-server - reinplace -E "s:MACPORTS_PREFIX/bin:${prefix}/bin:g" \ + reinplace -E "s:@MACPORTS_PREFIX@:${prefix}:g" \ ${wrappersbin}/rabbitmq-server reinplace -E "s:/usr/lib/rabbitmq/bin/:${prefix}/lib/rabbitmq/bin/:g" \ ${wrappersbin}/rabbitmq-server diff --git a/packaging/macports/make-port-diff.sh b/packaging/macports/make-port-diff.sh index 3eb1b9f5..0583b41b 100755 --- a/packaging/macports/make-port-diff.sh +++ b/packaging/macports/make-port-diff.sh @@ -15,7 +15,8 @@ cd $dir/macports svn checkout http://svn.macports.org/repository/macports/trunk/dports/net/rabbitmq-server/ 2>&1 >/dev/null # Clear out the svn $id tag -sed -i -e 's|^# \$.*$|# $Id$|' rabbitmq-server/Portfile +sed -e 's|^# \$.*$|# $Id$|' rabbitmq-server/Portfile >rabbitmq-server/Portfile.tmp \ + && mv rabbitmq-server/Portfile.tmp rabbitmq-server/Portfile # Get the files from the rabbitmq.com macports repo cd ../rabbitmq diff --git a/packaging/windows/Makefile b/packaging/windows/Makefile index 828cf000..8e0ab074 100644 --- a/packaging/windows/Makefile +++ b/packaging/windows/Makefile @@ -25,7 +25,7 @@ dist: xmlto -o . xhtml-nochunks ../../docs/rabbitmq-service.xml elinks -dump -no-references -no-numbering rabbitmq-service.html \ > $(TARGET_DIR)/readme-service.txt - todos $(TARGET_DIR)/readme-service.txt + todos $(TARGET_DIR)/readme-service.txt || unix2dos $(TARGET_DIR)/readme-service.txt rm -rf $(TARGET_DIR)/plugins-src zip -q -r $(TARGET_ZIP).zip $(TARGET_DIR) rm -rf $(TARGET_DIR) rabbitmq-service.html diff --git a/scripts/rabbitmq-env b/scripts/rabbitmq-env index 1fd1339d..1e3a0608 100755 --- a/scripts/rabbitmq-env +++ b/scripts/rabbitmq-env @@ -15,7 +15,7 @@ ## Copyright (c) 2007-2012 VMware, Inc. All rights reserved. ## -# Determine where this script is really located +# Determine where this script is really located (if this script is embedded, this is the location of the caller) SCRIPT_PATH="$0" while [ -h "$SCRIPT_PATH" ] ; do FULL_PATH=`readlink -f $SCRIPT_PATH 2>/dev/null` @@ -36,19 +36,19 @@ RABBITMQ_HOME="${SCRIPT_DIR}/.." [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname` NODENAME=rabbit@${HOSTNAME%%.*} -## Set (non-empty) default values for rabbitmq-env.conf variables to override -SERVER_ERL_ARGS="+K true +A30 +P 1048576 \ --kernel inet_default_connect_options [{nodelay,true}]" -CONFIG_FILE=/etc/rabbitmq/rabbitmq -LOG_BASE=/var/log/rabbitmq -MNESIA_BASE=/var/lib/rabbitmq/mnesia -PLUGINS_DIR="${RABBITMQ_HOME}/plugins" -ENABLED_PLUGINS_FILE=/etc/rabbitmq/enabled_plugins +## Set system defaults +if [ ! -f ${SCRIPT_DIR}/rabbitmq-sys ]; then + echo -n "WARNING: system defaults are not available -- " + echo "check the installation completed correctly." + exit 1 +fi + +. ${SCRIPT_DIR}/rabbitmq-sys -## Load configuration from the rabbitmq.conf file -if [ -f /etc/rabbitmq/rabbitmq.conf ] && \ - [ ! -f /etc/rabbitmq/rabbitmq-env.conf ] ; then - echo -n "WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- " - echo "location has moved to /etc/rabbitmq/rabbitmq-env.conf" +## Get configuration variables from the configure environment file +if [ -f ${OLD_CONF_ENV_FILE} ] && \ + [ ! -f ${CONF_ENV_FILE} ] ; then + echo -n "WARNING: ignoring ${OLD_CONF_ENV_FILE} -- " + echo "location has moved to ${CONF_ENV_FILE}" fi -[ -f /etc/rabbitmq/rabbitmq-env.conf ] && . /etc/rabbitmq/rabbitmq-env.conf +[ -f ${CONF_ENV_FILE} ] && . ${CONF_ENV_FILE} diff --git a/scripts/rabbitmq-sys b/scripts/rabbitmq-sys new file mode 100644 index 00000000..fc2b25f2 --- /dev/null +++ b/scripts/rabbitmq-sys @@ -0,0 +1,33 @@ +#!/bin/sh +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at http://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is VMware, Inc. +## Copyright (c) 2012 VMware, Inc. All rights reserved. +## + +### next line potentially updated in package install steps, do not alter +SYS_PREFIX= + +## Set system default values +SERVER_ERL_ARGS="+K true +A30 +P 1048576 \ +-kernel inet_default_connect_options [{nodelay,true}]" + +CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq +LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq +MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia +ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins + +OLD_CONF_ENV_FILE=/etc/rabbitmq/rabbitmq.conf +CONF_ENV_FILE=/etc/rabbitmq/rabbitmq-env.conf + +PLUGINS_DIR="${RABBITMQ_HOME}/plugins" diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index b3a620fa..12cd0c93 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -710,15 +710,12 @@ infos(Items, State) -> || Item <- (Items1 -- [synchronised_slave_pids])]. slaves_status(#q{q = #amqqueue{name = Name}}) -> - {ok, #amqqueue{mirror_nodes = MNodes, slave_pids = SPids}} = - rabbit_amqqueue:lookup(Name), - case MNodes of - undefined -> + case rabbit_amqqueue:lookup(Name) of + {ok, #amqqueue{mirror_nodes = undefined}} -> [{slave_pids, ''}, {synchronised_slave_pids, ''}]; - _ -> + {ok, #amqqueue{slave_pids = SPids}} -> {Results, _Bad} = - delegate:invoke( - SPids, fun (Pid) -> rabbit_mirror_queue_slave:info(Pid) end), + delegate:invoke(SPids, fun rabbit_mirror_queue_slave:info/1), {SPids1, SSPids} = lists:foldl( fun ({Pid, Infos}, {SPidsN, SSPidsN}) -> @@ -762,11 +759,9 @@ i(memory, _) -> {memory, M} = process_info(self(), memory), M; i(slave_pids, #q{q = #amqqueue{name = Name}}) -> - {ok, #amqqueue{mirror_nodes = MNodes, - slave_pids = SPids}} = rabbit_amqqueue:lookup(Name), - case MNodes of - undefined -> []; - _ -> SPids + case rabbit_amqqueue:lookup(Name) of + {ok, #amqqueue{mirror_nodes = undefined}} -> []; + {ok, #amqqueue{slave_pids = SPids}} -> SPids end; i(backing_queue_status, #q{backing_queue_state = BQS, backing_queue = BQ}) -> BQ:status(BQS); diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 9a6879b1..b6d38172 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -720,13 +720,14 @@ gb_trees_foreach(Fun, Tree) -> %% [{"-q",true},{"-p","/"}]} get_options(Defs, As) -> lists:foldl(fun(Def, {AsIn, RsIn}) -> - {AsOut, Value} = case Def of - {flag, Key} -> - get_flag(Key, AsIn); - {option, Key, Default} -> - get_option(Key, Default, AsIn) - end, - {AsOut, [{Key, Value} | RsIn]} + {K, {AsOut, V}} = + case Def of + {flag, Key} -> + {Key, get_flag(Key, AsIn)}; + {option, Key, Default} -> + {Key, get_option(Key, Default, AsIn)} + end, + {AsOut, [{K, V} | RsIn]} end, {As, []}, Defs). get_option(K, _Default, [K, V | As]) -> diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl index 54a7add2..323cf0ce 100644 --- a/src/rabbit_node_monitor.erl +++ b/src/rabbit_node_monitor.erl @@ -61,23 +61,26 @@ notify_cluster() -> %%-------------------------------------------------------------------- init([]) -> - {ok, no_state}. + {ok, ordsets:new()}. handle_call(_Request, _From, State) -> {noreply, State}. -handle_cast({rabbit_running_on, Node}, State) -> - rabbit_log:info("rabbit on ~p up~n", [Node]), - erlang:monitor(process, {rabbit, Node}), - ok = handle_live_rabbit(Node), - {noreply, State}; +handle_cast({rabbit_running_on, Node}, Nodes) -> + case ordsets:is_element(Node, Nodes) of + true -> {noreply, Nodes}; + false -> rabbit_log:info("rabbit on node ~p up~n", [Node]), + erlang:monitor(process, {rabbit, Node}), + ok = handle_live_rabbit(Node), + {noreply, ordsets:add_element(Node, Nodes)} + end; handle_cast(_Msg, State) -> {noreply, State}. -handle_info({'DOWN', _MRef, process, {rabbit, Node}, _Reason}, State) -> - rabbit_log:info("node ~p lost 'rabbit'~n", [Node]), +handle_info({'DOWN', _MRef, process, {rabbit, Node}, _Reason}, Nodes) -> + rabbit_log:info("rabbit on node ~p down~n", [Node]), ok = handle_dead_rabbit(Node), - {noreply, State}; + {noreply, ordsets:del_element(Node, Nodes)}; handle_info(_Info, State) -> {noreply, State}. diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 908a279c..01242e81 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -505,9 +505,11 @@ handle_frame(Type, Channel, Payload, process_frame(Frame, Channel, State) -> case get({channel, Channel}) of {ChPid, AState} -> - NewAState = process_channel_frame(Frame, Channel, ChPid, AState), - put({channel, Channel}, {ChPid, NewAState}), - post_process_frame(Frame, ChPid, State); + case process_channel_frame(Frame, ChPid, AState) of + {ok, NewAState} -> put({channel, Channel}, {ChPid, NewAState}), + post_process_frame(Frame, ChPid, State); + {error, Reason} -> handle_exception(State, Channel, Reason) + end; undefined when ?IS_RUNNING(State) -> ok = create_channel(Channel, State), process_frame(Frame, Channel, State); @@ -910,17 +912,15 @@ create_channel(Channel, State) -> put({channel, Channel}, {ChPid, AState}), ok. -process_channel_frame(Frame, Channel, ChPid, AState) -> +process_channel_frame(Frame, ChPid, AState) -> case rabbit_command_assembler:process(Frame, AState) of - {ok, NewAState} -> NewAState; + {ok, NewAState} -> {ok, NewAState}; {ok, Method, NewAState} -> rabbit_channel:do(ChPid, Method), - NewAState; + {ok, NewAState}; {ok, Method, Content, NewAState} -> rabbit_channel:do_flow( ChPid, Method, Content), - NewAState; - {error, Reason} -> self() ! {channel_exit, Channel, - Reason}, - AState + {ok, NewAState}; + {error, Reason} -> {error, Reason} end. handle_exception(State = #v1{connection_state = closed}, _Channel, _Reason) -> |