I have tested and this fix is ok. However under high load stream:features is not returned on session creation. This breaks clients waiting  for stream:features or creates an extra round trip to get stream:features. This is not ideal. <div>
<br></div><div>The following patch prevents the DOS when wait='0' and prevents the extra round trip for sending stream:features</div><div><br></div><div><div>diff --git a/src/web/ejabberd_http_bind.erl b/src/web/ejabberd_http_bind.erl</div>
<div>index bde401c..ca23db4 100644</div><div>--- a/src/web/ejabberd_http_bind.erl</div><div>+++ b/src/web/ejabberd_http_bind.erl</div><div>@@ -947,8 +947,7 @@ prepare_outpacket_response(#http_bind{id=Sid, wait=Wait,</div>
<div>                                StreamTail]</div><div>                end,</div><div>            case OutEls of </div><div>-               [] -></div><div>-                   prepare_response(Sess, Rid, OutPacket, true);</div>
<div>+               [] when Wait > 0 -> prepare_response(Sess, Rid, OutPacket, true);</div><div>                [{xmlelement,</div><div>                  "stream:error",_,_}] -></div><div>                    {200, ?HEADER, "<body type='terminate' "</div>
<div><br></div><div><br></div><div>Is wait='0' valid? That seems to destroy the purpose of long polling. :) </div><div><br></div><div><br></div><div class="gmail_quote">On Mon, Nov 29, 2010 at 9:05 AM, Christopher Zorn <span dir="ltr"><<a href="mailto:christopher.zorn@gmail.com">christopher.zorn@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Mon, Nov 29, 2010 at 8:56 AM, Badlop <span dir="ltr"><<a href="mailto:badlop@gmail.com" target="_blank">badlop@gmail.com</a>></span> wrote:<br>
</div><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2010/11/29 Christopher Zorn <<a href="mailto:christopher.zorn@gmail.com" target="_blank">christopher.zorn@gmail.com</a>>:<br>
<div>> I just looked at the patch briefly and have not tested it. Did this patch<br>
> get tested?<br>
<br>
</div>I briefly tested that:<br>
* Now there isn't an infinite loop<br>
* BOSH clients (Gajim and Oneteam) can login correctly as usual<br>
<br>
The patch is committed in 2.1.x branch.<br>
<div><br></div></blockquote><div><br></div></div><div>Ok. Cool. I am testing now as well. </div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>

<br>
> I will take a look. I think the problem has something to do with the<br>
> wait='0' value in that test data.<br>
<br>
</div><div>> Originally there was a sleep that delayed all requests by 100ms and I<br>
> believe that was put in to make sure sessions were created in mnesia. In my<br>
> patch this loop happens when there is not session data in the mnesia table,<br>
> but should be. This patch removes that.<br>
> With the current change, if session data is not in the mnesia table then it<br>
> will return bad data. I agree the loop should be removed but its removal<br>
> causes a bug. There needs to be a cleaner solution on making sure things are<br>
> returned correctly when the session creation is finished.<br>
<br>
</div>Ok. If you take a look and find any problem in the patch, or<br>
have an alternative/cleaner solution to the loop problem, please comment it.<br>
<div><div></div><div><br></div></div></blockquote><div><br></div></div><div>Looking now, I will commit what I find. Thanks. </div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>
<br>
---<br>
Badlop<br>
ProcessOne<br>
_______________________________________________<br>
ejabberd mailing list<br>
<a href="mailto:ejabberd@jabber.ru" target="_blank">ejabberd@jabber.ru</a><br>
<a href="http://lists.jabber.ru/mailman/listinfo/ejabberd" target="_blank">http://lists.jabber.ru/mailman/listinfo/ejabberd</a><br>
</div></div></blockquote></div></div><br>
</blockquote></div><br></div>