On Fri, Apr 20, 2018 at 9:49 AM, Ramesh R <[email protected]> wrote:
> Please find my full code on stack overflow, why it is crashed? please give
> me a help. thanks...
> https://stackoverflow.com/questions/49920982/libuv-udp-echo-server-regarding
>
> Segmentation fault happened.
>
> static void on_recv(uv_udp_t* handle, ssize_t nread, const uv_buf_t* rcvbuf,
> const struct sockaddr* addr, unsigned flags) {
>     if(addr == NULL || nread == 0){
>         printf("addr is null addr: [%p], nread: [%d]\n", addr, nread);
>         return;
>     }
>
>     printf("called next on rcv\n");
>     if (nread > 0) {
>         printf("%lu\n",nread);
>         printf("%s",rcvbuf->base);
>     }
>     printf("free  :%lu %p handle:  %p \n",rcvbuf->len,rcvbuf->base, handle);
>     free(rcvbuf->base);
>
>     uv_udp_send_t send_req;
>     char sender[17] = "";
>
>     struct sockaddr snd_addr;
>     uv_buf_t sndbuf = uv_buf_init("PONG",4);
>     uv_ip4_name((const struct sockaddr_in*) addr, sender, 16);
>     fprintf(stderr, "Recv from %s\n", sender);
>     if(uv_udp_send(&send_req, handle, (const struct uv_buf_t *)&sndbuf, 1,
> (const struct sockaddr *)addr, on_send))
>     {
>         printf("error\n");
>     }
>     printf("send success\n");
>     return;
> }
>
>
>
> crashed status:
> ----------------------
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x0012af4a in uv__udp_run_completed (handle=0x80491a0) at src/unix/udp.c:100
> 100     QUEUE_REMOVE(q);
> (gdb) bt
> #0  0x0012af4a in uv__udp_run_completed (handle=0x80491a0) at
> src/unix/udp.c:100
> #1  0x0012b111 in uv__udp_io (loop=0x132800, w=0x80491e0, revents=4) at
> src/unix/udp.c:146
> #2  0x0011da69 in uv__run_pending (loop=0x132800, mode=UV_RUN_DEFAULT) at
> src/unix/core.c:778
> #3  uv_run (loop=0x132800, mode=UV_RUN_DEFAULT) at src/unix/core.c:360
> #4  0x08048bf2 in main (argc=1, argv=0xbffffa14) at test-udp.c:108
> (gdb)

Lifetime issue: you need to allocate `send_req` on the heap instead of
the stack.

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to