<html><head/><body><html><head></head><body>Hi -<br>
<br>
Is your code arranged like the test server in terms of using the "call me back when I am writable" api when you have something to send, and writing a single thing in the "I am writable" callback?<br>
<br>
The mystery here is how you end up trying to do multiple things with a dead socket, the library shouldn't be able to call you back even once under those circumstances.  However if your code took the (wrong) approach to store the wsi and randomly try to send on it, that can easily happen.<br>
<br>
-Andy<br>
<br><br><div class="gmail_quote">Jack Mitchell <ml@communistcode.co.uk> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre style="white-space: pre-wrap; word-wrap:break-word; font-family: sans-serif; margin-top: 0px">On 18/01/13 15:42, Jack Mitchell wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;">On 18/01/13 14:04, "Andy Green (林安廸)" wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;">On 18/01/13 21:20, the mail apparently from Jack Mitchell included:<br /><br />Hi -<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;">Today I tried out the latest libwebsockets master in my embedded<br />application and gave it a good thrashing. I managed to reproduce a<br />segfault a few times - I have had this issue before but thought I had<br />fixed it but it has reared it's ugly head again in this new release. I</blockquote><br />Hm sorry to hear that but I am glad
  to
hear you are beating on the <br />library HEAD.<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;">have attached a valgrind trace below in the hope that someone could <br />help<br />me out.<br /><br />I think it is trying to write to a dead socket (null pointer) and<br />bailing out. Should there be some extra error checking somewhere to<br />ensure that a dead socket is never written to?</blockquote><br />Until this week it would have been too expensive, but with the new <br />lookup array approach it should be possible to cheaply confirm the <br />struct websocket you have hold of still jibes with the pollfd it <br />claims to hold and the fds match.<br /><br />I added an api lws_confirm_legit_wsi()<br /><br /><a
href="http://git.libwebsockets.org/cgi-bin/cgit/libwebsockets/commit/?id=acbaee649ab62beb34609d4b79e8814a2913430f">http://git.libwebsockets.org/cgi-bin/cgit/libwebsockets/commit/?id=acbaee649ab62beb34609d4b79e8814a2913430f</a> <br /><br /><br />and used it on libwebsocket_write... if you think that's the problem <br />you can sprinkle them around and see if it fires.  It looks for any <br />inconsistency between what the struct websocket thinks its position <br />in in the polling table and what the polling table thinks.<br /><br />I wasn't really able to tie up the valgrind log with the idea <br />something blows segfaults.  The log shows a memcpy inside deflate is <br />reading 2 bytes it shouldn't?<br /><br />-Andy<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;">I'm going to investigate some more and will let you know if I find a<br />solution!<br /><br /><snip></blockquote><br /><br /><
 br
/><br /><br /></blockquote>Hi Andy,<br /><br />I turned the DEBUG levels right up (1 | 2 | 4 | 8) and it stopped the<br />segfault. I would assume this means that somewhere there is maybe some<br />error checking code that the debug ifdefs out?<br /><br />Jack.</blockquote><br /><br /><br /><br />Below is a log of me thrashing it so you can see which parts of the code <br />I am giving a good kicking.<br /><br />Device (0) : FPGA Read Function took 122ms<br />[1358513556:7875] DEBUG: accepted new conn  port 42586 on fd=26<br />[1358513556:7879] INFO: insert_wsi_socket_into_fds: wsi=0x17ad80, <br />sock=26, fds pos=4<br />[1358513556:7881] DEBUG: Session Socket 0x170c48 (fd=27) dead<br />[1358513556:7896] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513556:7898] INFO: remove_wsi_socket_from_fds: wsi=0x170c48, <br />sock=27, fds pos=3<br />[1358513556:7901] DEBUG: calling back CLOSED<br />[1358513556:7904] DEBUG: closing: shutdown returned 10
 7<br
/>[1358513556:8930] DEBUG: accepted new conn  port 42587 on fd=27<br />[1358513556:8933] INFO: insert_wsi_socket_into_fds: wsi=0x170c48, <br />sock=27, fds pos=4<br />[1358513556:8934] DEBUG: Session Socket 0x17ad80 (fd=26) dead<br />[1358513556:8934] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513556:8935] INFO: remove_wsi_socket_from_fds: wsi=0x17ad80, <br />sock=26, fds pos=3<br />[1358513556:8936] DEBUG: calling back CLOSED<br />[1358513556:8938] DEBUG: closing: shutdown returned 107<br />[1358513557:0161] DEBUG: ERROR writing len 63 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:0442] DEBUG: ERROR writing len 206 to socket -1<br />ERROR: webSock_writeJsonObject: Socket Generic: Failed to write json <br />object to socket!<br />[1358513557:0521] DEBUG: ERROR writing len 7 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br
/>socket!<br />[1358513557:0727] DEBUG: ERROR writing len 20 to socket -1<br />ERROR: webSock_writeJsonObject: Socket Generic: Failed to write json <br />object to socket!<br />[1358513557:0790] DEBUG: ERROR writing len 7 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:1329] DEBUG: accepted new conn  port 42589 on fd=26<br />[1358513557:1331] INFO: insert_wsi_socket_into_fds: wsi=0x17b3d0, <br />sock=26, fds pos=4<br />[1358513557:1332] DEBUG: Session Socket 0x170c48 (fd=27) dead<br />[1358513557:1333] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513557:1334] INFO: remove_wsi_socket_from_fds: wsi=0x170c48, <br />sock=27, fds pos=3<br />[1358513557:1335] DEBUG: calling back CLOSED<br />[1358513557:1336] DEBUG: closing: shutdown returned 107<br />[1358513557:2357] DEBUG: accepted new conn  port 42590 on fd=27<br />[1358513557:2360] INFO: insert_wsi_socket_into_fds: wsi=0x1
 70c48,
<br />sock=27, fds pos=4<br />[1358513557:2361] DEBUG: Session Socket 0x17b3d0 (fd=26) dead<br />[1358513557:2362] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513557:2363] INFO: remove_wsi_socket_from_fds: wsi=0x17b3d0, <br />sock=26, fds pos=3<br />[1358513557:2363] DEBUG: calling back CLOSED<br />[1358513557:2365] DEBUG: closing: shutdown returned 107<br />[1358513557:3503] DEBUG: ERROR writing len 63 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:3631] DEBUG: ERROR writing len 206 to socket -1<br />ERROR: webSock_writeJsonObject: Socket Generic: Failed to write json <br />object to socket!<br />[1358513557:3731] DEBUG: ERROR writing len 7 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:3794] DEBUG: ERROR writing len 20 to socket -1<br />ERROR: webSock_writeJsonObject: Socket Generic: Failed to wr
 ite
json <br />object to socket!<br />[1358513557:3833] DEBUG: ERROR writing len 7 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:4354] DEBUG: accepted new conn  port 42591 on fd=26<br />[1358513557:4358] INFO: insert_wsi_socket_into_fds: wsi=0x17c208, <br />sock=26, fds pos=4<br />[1358513557:4361] DEBUG: Session Socket 0x170c48 (fd=27) dead<br />[1358513557:4363] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513557:4365] INFO: remove_wsi_socket_from_fds: wsi=0x170c48, <br />sock=27, fds pos=3<br />[1358513557:4368] DEBUG: calling back CLOSED<br />[1358513557:4372] DEBUG: closing: shutdown returned 107<br />[1358513557:5469] DEBUG: ERROR writing len 63 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:5579] DEBUG: ERROR writing len 206 to socket -1<br />ERROR: webSock_writeJsonObject: Socket Generic: Faile
 d to
write json <br />object to socket!<br />[1358513557:5627] DEBUG: ERROR writing len 7 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:5689] DEBUG: ERROR writing len 20 to socket -1<br />ERROR: webSock_writeJsonObject: Socket Generic: Failed to write json <br />object to socket!<br />[1358513557:5735] DEBUG: ERROR writing len 7 to socket -1<br />ERROR: webSock_genericSendRecieve: Socket Generic: Failed to write to <br />socket!<br />[1358513557:6258] DEBUG: accepted new conn  port 42592 on fd=27<br />[1358513557:6311] INFO: insert_wsi_socket_into_fds: wsi=0x170c48, <br />sock=27, fds pos=4<br />[1358513557:6317] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513557:6336] INFO: remove_wsi_socket_from_fds: wsi=0x17c208, <br />sock=26, fds pos=3<br />[1358513557:6341] DEBUG: calling back CLOSED<br />[1358513557:6356] DEBUG: closing: shutdown returned 107<br />Device (0) : FPGA 
 Read
Function took 93ms<br />[1358513557:7407] DEBUG: accepted new conn  port 42593 on fd=26<br />[1358513557:7429] INFO: insert_wsi_socket_into_fds: wsi=0x17c208, <br />sock=26, fds pos=4<br />[1358513557:7442] DEBUG: Session Socket 0x170c48 (fd=27) dead<br />[1358513557:7444] DEBUG: libwebsocket_close_and_free_session: <br />just_kill_connection<br />[1358513557:7447] INFO: remove_wsi_socket_from_fds: wsi=0x170c48, <br />sock=27, fds pos=3<br />[1358513557:7449] DEBUG: calling back CLOSED<br />[1358513557:7452] DEBUG: closing: shutdown returned 107<br /><br /></pre></blockquote></div></body></html></body></html>