[Libwebsockets] Segfault after doing lws_ring_insert

prelag at yahoo.com prelag at yahoo.com
Wed Aug 5 20:37:57 CEST 2020


Hello,

Thanks in advance!  I know this is something simple I am overlooking.

I have a test program based on the client echo example.  I am attempting to create a message and insert it into the ring_buffer to get picked up on the next LWS_CALLBACK_CLIENT_WRITEABLE.

Here is my simple function that is called when a message is ready to be put in the buffer:

void MyClass::sendResponse(string &response) {
    syslog(LOG_DEBUG, "MyClass::sendResponse %s", response.c_str());


    int len = strlen(response.c_str() + LWS_PRE);


    msg3.payload = malloc(len);


    memcpy((char *) msg3.payload + LWS_PRE, response.c_str(), len);
    msg3.len = len;


    //lws_ring_insert(pss->ring, &msg3, 1);


    if (!lws_ring_insert(pss->ring, &msg3, 1)) {  //<--- directly after the ring_insert we get a segfault
        __minimal_destroy_message(&msg3);


        syslog(LOG_DEBUG, "dropping!\n");
    }

}

struct msg is:

/* one of these created for each message */
struct msg {
    void *payload; /* is malloc'd */
    size_t len;
    char binary;
    char first;
    char final;
};


Here is the stack trace:

_Unwind_VRS_Pop() at unwind-arm.c:240 0xb6c724f0    
__gnu_unwind_execute() at pr-support.c:153 0xb6c72b18    
__gnu_unwind_frame() at pr-support.c:331 0xb6c72db8    
__cxxabiv1::__gxx_personality_v0() at eh_personality.cc:386 0xb6bc788c    
__gnu_Unwind_Backtrace() at unwind-arm-common.inc:589 0xb6c7206c    
___Unwind_Backtrace() at libunwind.S:360 0xb6c72984    
__GI___backtrace() at backtrace.c:105 0xb6d61a14    
backtrace_and_maps() at libc_fatal.c:47 0xb6c9a054    
__libc_message() at libc_fatal.c:172 0xb6ce9c04    
malloc_printerr() at malloc.c:5,046 0xb6cf0724    
_int_malloc() at malloc.c:3,509 0xb6cf2a58    
__GI___libc_malloc() at malloc.c:2,925 0xb6cf4d2c    
__GI___open_memstream() at memstream.c:76 0xb6ce82cc    
__GI___vsyslog_chk() at syslog.c:167 0xb6d4fb64    
__syslog() at syslog.c:117 0xb6d50120    
lwsl_emit_syslog() at unix-misc.c:80 0xb6f33bae    
_lws_logv() at logs.c:188 0xb6f12c6a    
_lws_log() at logs.c:196 0xb6f12cb6    
_lws_change_pollfd() at pollfd.c:150 0xb6f17048    
__lws_change_pollfd() at pollfd.c:479 0xb6f17770    
lws_change_pollfd() at pollfd.c:500 0xb6f177b0    
lws_handle_POLLOUT_event() at service.c:168 0xb6f17cec    
rops_handle_POLLIN_ws() at ops-ws.c:993 0xb6f2087e    
lws_service_fd_tsi() at service.c:703 0xb6f186c6    
_lws_plat_service_forced_tsi() at unix-service.c:49 0xb6f343ba    
_lws_plat_service_tsi() at unix-service.c:207 0xb6f34774    
lws_plat_service() at unix-service.c:221 0xb6f347cc    
lws_service() at service.c:770 0xb6f1880a    

Thanks!

Paul Roberts



More information about the Libwebsockets mailing list