Mercurial > prosody-hg
comparison net/server_select.lua @ 3543:90b21508ac27
net.server_select: Restore real sendbuffer() before calling onconnect handler, in case onconnect sends data and the socket is still writeable (causing stack overflow into sendbuffer()/onconnect())
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 22 Oct 2010 06:33:30 +0100 |
| parents | e8c06d20a18b |
| children | d12141cbbaa0 |
comparison
equal
deleted
inserted
replaced
| 3542:2acaf129e1c3 | 3543:90b21508ac27 |
|---|---|
| 851 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) | 851 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) |
| 852 if listeners.onconnect then | 852 if listeners.onconnect then |
| 853 -- When socket is writeable, call onconnect | 853 -- When socket is writeable, call onconnect |
| 854 local _sendbuffer = handler.sendbuffer; | 854 local _sendbuffer = handler.sendbuffer; |
| 855 handler.sendbuffer = function () | 855 handler.sendbuffer = function () |
| 856 handler.sendbuffer = _sendbuffer; | |
| 856 listeners.onconnect(handler); | 857 listeners.onconnect(handler); |
| 857 handler.sendbuffer = _sendbuffer; | |
| 858 -- If there was data with the incoming packet, handle it now. | 858 -- If there was data with the incoming packet, handle it now. |
| 859 if #handler:bufferqueue() > 0 then | 859 if #handler:bufferqueue() > 0 then |
| 860 return _sendbuffer(); | 860 return _sendbuffer(); |
| 861 end | 861 end |
| 862 end | 862 end |
