Nerver mind. it's my fault. It need to include event2/thread.h and links event_pthreads to make it run
On Fri, Apr 2, 2010 at 5:53 PM, Jarod Liu <[email protected]> wrote: > My demo code works fine without the BEV_OPT_THREADSAFE option. > With the option segmentation fault 100% will happen. > > Maybe it is a platform specified problem, I see no one report before. > > ===================================================================== > $ /usr/bin/c++ --version > c++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) > > $ lsb_release -a > LSB Version: > :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch > Distributor ID: CentOS > Description: CentOS release 5.4 (Final) > Release: 5.4 > Codename: Final > > ===================================================================== > *** Aborted at 1270200692 (unix time) try "date -d @1270200692" if you > are using GNU date *** > PC: @ 0x17637a _bufferevent_incref_and_lock > *** SIGSEGV (@0x100) received by PID 32210 (TID 0xb7f8e6d0) from PID > 256; stack trace: *** > @ 0x499440 (unknown) > @ 0x176d5c bufferevent_enable > @ 0x804901e accept_conn_cb() > @ 0x179d23 listener_read_cb > @ 0x16e5a9 event_base_loop > @ 0x16f1a5 event_base_dispatch > @ 0x8048f4d main > @ 0xa99e9c (unknown) > @ 0x8048b21 (unknown) > Segmentation fault > > ===================================================================== > #include <cstring> > #include <event2/util.h> > #include <event2/event.h> > #include <event2/bufferevent.h> > #include <event2/listener.h> > > static void accept_conn_cb(struct evconnlistener* listener, > evutil_socket_t sockfd, struct sockaddr* addr, int socklen, > void *user_data) { > > struct event_base *base = evconnlistener_get_base(listener); > struct bufferevent *bev = bufferevent_socket_new( > base, sockfd, BEV_OPT_CLOSE_ON_FREE | > BEV_OPT_THREADSAFE); > bufferevent_enable(bev, EV_READ | EV_WRITE); > > for (char i='a'; i<'z'; i++) { > bufferevent_write(bev, &i, sizeof(i)); > } > } > > int main(int argc, char** argv) { > struct event_base *base; > struct sockaddr_in sin; > struct evconnlistener *listener; > > base = event_base_new(); > > memset(&sin, 0, sizeof(sin)); > sin.sin_family = AF_INET; > sin.sin_addr.s_addr = htonl(0); > sin.sin_port = htons(9050); > > listener = evconnlistener_new_bind(base, accept_conn_cb, NULL, > LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE, SOMAXCONN, > (struct sockaddr*)&sin, sizeof(sin)); > event_base_dispatch(base); > return 0; > } // ---------- end of function main ---------- > *********************************************************************** To unsubscribe, send an e-mail to [email protected] with unsubscribe libevent-users in the body.
