diff options
| author | Matthias Radestock <matthias@lshift.net> | 2009-05-20 19:41:53 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@lshift.net> | 2009-05-20 19:41:53 +0100 |
| commit | 2d97ee9586076c37808f75df69178cf0d7f40e76 (patch) | |
| tree | 1a181307ea9c4ff5e70e4e089919b61956b1964e /src | |
| parent | 3340a360fbe833246d42bce38e0ab27c09c11656 (diff) | |
| download | rabbitmq-server-git-2d97ee9586076c37808f75df69178cf0d7f40e76.tar.gz | |
break ume cycles
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_exchange.erl | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 4b5aea5c00..0ec2d42dcd 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -190,7 +190,10 @@ info_all(VHostPath) -> map(VHostPath, fun (X) -> info(X) end). info_all(VHostPath, Items) -> map(VHostPath, fun (X) -> info(X, Items) end). -publish(X, Mandatory, Immediate, Txn, +publish(X, Mandatory, Immediate, Txn, Message) -> + publish(X, [], Mandatory, Immediate, Txn, Message). + +publish(X, Seen, Mandatory, Immediate, Txn, Message = #basic_message{routing_key = RK, content = C}) -> case rabbit_router:deliver(route(X, RK, C), Mandatory, Immediate, Txn, Message) of @@ -200,15 +203,24 @@ publish(X, Mandatory, Immediate, Txn, undefined -> R; UmeName -> - case lookup(UmeName) of - {ok, Ume} -> - publish(Ume, Mandatory, Immediate, Txn, Message); - {error, not_found} -> - rabbit_log:warning( - "unroutable message exchange for ~s " - "does not exist: ~s", - [rabbit_misc:rs(XName), rabbit_misc:rs(UmeName)]), - R + NewSeen = [XName | Seen], + case lists:member(UmeName, NewSeen) of + true -> + R; + false -> + case lookup(UmeName) of + {ok, Ume} -> + publish(Ume, NewSeen, + Mandatory, Immediate, Txn, + Message); + {error, not_found} -> + rabbit_log:warning( + "unroutable message exchange for ~s " + "does not exist: ~s", + [rabbit_misc:rs(XName), + rabbit_misc:rs(UmeName)]), + R + end end end; R -> |
