summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-01-22 12:03:00 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-01-22 12:03:00 +0000
commite9cdeca755062af54b1034f7b1e371f25225ab86 (patch)
tree9e2285407ff4d87f3b396c49983794dc14437ecd
parentecd3ec697b602b92ff08a3eaafc0521dafe8bff5 (diff)
downloadrabbitmq-server-e9cdeca755062af54b1034f7b1e371f25225ab86.tar.gz
Don't explode when there is more than one queue to route to!
-rw-r--r--src/dtree.erl9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/dtree.erl b/src/dtree.erl
index f39d8e3a..436bac55 100644
--- a/src/dtree.erl
+++ b/src/dtree.erl
@@ -121,10 +121,13 @@ take_all(SK, {P, S}) ->
{KVs, {P1, prune(SKS, PKS, S)}}
end.
-%% Drop all entries for the given primary key.
+%% Drop all entries for the given primary key (which does not have to exist).
drop(PK, {P, S}) ->
- SKS = gb_trees:get(PK, P),
- {gb_trees:delete(PK, P), prune(SKS, gb_sets:singleton(PK), S)}.
+ case gb_trees:lookup(PK, P) of
+ none -> {P, S};
+ {value, SKS} -> {gb_trees:delete(PK, P),
+ prune(SKS, gb_sets:singleton(PK), S)}
+ end.
is_defined(SK, {_P, S}) -> gb_trees:is_defined(SK, S).