8000 bufferevent_write caused signal SIGSEGV, Segmentation fault · Issue #1739 · libevent/libevent · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
bufferevent_write caused signal SIGSEGV, Segmentation fault #1739
Closed
@cucxbd

Description

@cucxbd

Hello, segmentation fault occurred when I called bufferevent_write method. The version I am using is 2.1.11 stable.
My program has two sockets, each socket creates a bufferevent, and each bufferevent is placed in a different thread. When one of the sockets receives data, the data will be written to the other socket.

read callback:

void ServiceHandler::ReadCB(bufferevent *buffev, void *arg)
{
    ServiceHandler *ac = (ServiceHandler*)arg;
    ac->Handler(buffev);
}

RelayServiceHandler is a subclass of ServiceHandler,The following is the logic of the handler method:

void RelayServiceHandler::Handler(bufferevent * buffer_event) {
    evbuffer *input = bufferevent_get_input(buffer_event);
    size_t src_len = evbuffer_get_length(input);
    char *buf = new char[src_len]();
    evbuffer_remove(input, buf, src_len);
    std::shared_ptr<RelayServiceHandler> peer = GetPeerHandler();
    if (peer != nullptr)
    {
        peer->WriteBuffEvent(buf, src_len);
    }

The following is the WriteBuffEvent method, which calls bufferevent_write:

int ServiceHandler::WriteBuffEvent(const void *data, size_t size)
{
    int ret = -1;
    if (bev_ == nullptr) {
        svrcomm_log(__FILE__, __LINE__, FCODEC_LOG_WARNING,
                    "WriteBuffEvent error, this %p\n", this);
        return ret;
    }

    bufferevent_lock(bev_);
    ret = bufferevent_write(bev_, data, size);
    bufferevent_unlock(bev_);

    return ret;
}

trace:

#0  0x00005618a6b4afd0 in evbuffer_free_trailing_empty_chains (buf=<optimized out>) at buffer.c:295
295	buffer.c: No such file or directory.
[Current thread is 1 (Thread 0x7f8fdbfff640 (LWP 70962))]
(gdb) 
(gdb) bt
#0  0x00005618a6b4afd0 in evbuffer_free_trailing_empty_chains (buf=<optimized out>) at buffer.c:295
#1  0x00005618a6b4b3ce in evbuffer_chain_insert (buf=buf@entry=0x7f8fc0040270, 
    chain=chain@entry=0x7f8fc401f660) at buffer.c:320
#2  0x00005618a6b4bb4e in evbuffer_add (buf=0x7f8fc0040270, data_in=0x7f8fc40088f0, datlen=64)
    at buffer.c:1813
#3  0x00005618a6b4f3b0 in bufferevent_write (bufev=<optimized out>, data=<optimized out>, 
    size=<optimized out>) at bufferevent.c:454
#4  0x00005618a6a8553d in ServiceHandler::WriteBuffEvent (this=0x7f8fc0000c50, data=0x7f8fc40088f0, 
    size=4104) at ServiceHandler.cpp:101
#5  0x00005618a6a92c5c in RelayServiceHandler::Handler (this=0x7f8fc4000c50, 
    buffer_event=0x7f8fc4005f90) at RelayServiceHandler.cpp:398
#6  0x00005618a6a8558c in ServiceHandler::ReadCB (buffev=0x7f8fc4005f90, arg=0x7f8fc4000c50)
    at ServiceHandler.cpp:124
#7  0x00005618a6b4fd64 in bufferevent_run_readcb_ (bufev=0x7f8fc4005f90, options=<optimized out>)
    at bufferevent.c:251
#8  0x00005618a6b517aa in bufferevent_trigger_nolock_ (options=0, iotype=2, bufev=0x7f8fc4005f90)
    at bufferevent-internal.h:411
#9  be_filter_read_nolock_ (me_=me_@entry=0x7f8fc4005f90, underlying=<optimized out>)
    at bufferevent_filter.c:466
#10 0x00005618a6b518bf in be_filter_readcb (underlying=0x7f8fc4005af0, me_=0x7f8fc4005f90)
    at bufferevent_filter.c:521
#11 0x00005618a6b4fd64 in bufferevent_run_readcb_ (bufev=0x7f8fc4005af0, options=<optimized out>)
    at bufferevent.c:251
#12 0x00005618a6b4737c in bufferevent_trigger_nolock_ (options=0, iotype=2, bufev=0x7f8fc4005af0)
    at bufferevent-internal.h:411
#13 consider_reading (bev_ssl=0x7f8fc4005af0) at bufferevent_openssl.c:842
#14 0x00005618a6b473c1 in be_openssl_readeventcb (fd=<optimized out>, what=<optimized out>, 
    ptr=0x7f8fc4005af0) at bufferevent_openssl.c:951
#15 0x00005618a6b59e24 in event_persist_closure (ev=<optimized out>, base=0x5618a862c910)
    at event.c:1629
#16 event_process_active_single_queue (base=base@entry=0x5618a862c910, activeq=0x5618a8629320, 
    max_to_process=max_to_process@entry=2147483647, endtime=endtime@entry=0x0) at event.c:1688
#17 0x00005618a6b5a78f in event_process_active (base=0x5618a862c910) at event.c:1789

I have no idea what happended. If anyone would like to help I would be very grateful! Thanks!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0