On 07/30/2014 09:04 AM, Ashish wrote:
> 
> 
> On Wednesday, July 23, 2014 1:50:13 PM UTC+5:30, Saúl Ibarra Corretgé wrote:
> 
>     On 07/22/2014 06:39 PM, Ashish wrote:
>     >
>     > VisualStudio shows me stack like this:
>     >
>     >      Application.exe!_NMSG_WRITE(int rterrnum=10)  Line 217    C
>     >      Application.exe!abort()  Line 61 + 0x7 bytes    C
>     >      Application.exe!_wassert(const wchar_t * expr=0x00496678, const
>     > wchar_t * filename=0x0049652c, unsigned int lineno=352)  Line 153
>        C
>     >      Application.exe!uv_tcp_queue_accept(uv_tcp_s *
>     handle=0x0013fec4,
>     > uv_tcp_accept_s * req=0x003eacb0)  Line 352 + 0x21 bytes    C
>     >      Application.exe!uv_tcp_accept(uv_tcp_s * server=0x0013fec4,
>     > uv_tcp_s * client=0x49799684)  Line 639 + 0xd bytes    C
>     >>   Application.exe!uv_accept(uv_stream_s * server=0x0013fec4,
>     > uv_stream_s * client=0x49799684)  Line 55 + 0xd bytes    C
>     >
>     >
>     > Asssertion in uv_tcp_queue_accept in src\win\tcp.c fails:
>     >     assert(handle->flags & UV_HANDLE_LISTENING);
>     >
>     >
>     > Value of 'handle->flags' is 0x00000220
>     >
> 
>     Before this happens, do you get any connection callback called with an
>     error?
> 
>     I believe the culprit is this line here:
>     https://github.com/joyent/libuv/blob/master/src/win/tcp.c#L1050
>     <https://github.com/joyent/libuv/blob/master/src/win/tcp.c#L1050>
> 
>     -- 
>     Saúl Ibarra Corretgé
>     bettercallsaghul.com <http://bettercallsaghul.com>
> 
> 
> 
> This time I had in my code (status < 0) and found error code in
> connection callback -4060 (maps to UV__ENOBUFS)
> I return from callback when status < 0
> But next connection causes assertion failure:
> 
> *Assertion failed: handle->flags & UV_HANDLE_LISTENING, file
> src\win\tcp.c, line 352*
> 
> The assertion at line 352 is (in uv_tcp_queue_accept)
> assert(handle->flags & UV_HANDLE_LISTENING);
> 
> Flag value: handle->flags = 0x00000220
> 
> This is stack:
>      Application.exe!uv_tcp_queue_accept(uv_tcp_s * handle=0x0013fec4,
> uv_tcp_accept_s * req=0x003eb1b8)  Line 352 + 0x21 bytes    C
>      Application.exe!uv_tcp_accept(uv_tcp_s * server=0x0013fec4,
> uv_tcp_s * client=0x15b49bdc)  Line 639 + 0xd bytes    C
>      Application.exe!uv_accept(uv_stream_s * server=0x0013fec4,
> uv_stream_s * client=0x15b49bdc)  Line 55 + 0xd bytes    C
>      Application.exe!on_new_connection(uv_stream_s * server=0x0013fec4,
> int status=0)  Line 1708 + 0xb bytes    C++
> 
> Here on_new_connection is connection callback. When assertion fails the
> callback doesn't indicate any error code in status.
> 

As I mentioned on my previous email, the issue seems to be here:
https://github.com/joyent/libuv/blob/master/src/win/tcp.c#L1054

When accepting a connection fails, the UV_HANDLE_LISTENING flag is
reset, that's why your next attempt blows up the assert.

Please open an issue on GH.

-- 
Saúl Ibarra Corretgé
bettercallsaghul.com


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to