Hi, all, I'm using libevent for my project. But I can't find an easy way to make sure a bufferevent structure is still legal when I want to call bufferevent_write to send some info back to client.
In my project, the event_base_dispatch() runs in main thread, and when it receives some packets from a client, a structure Message is constructed and pushed to a message queue. There is a thread pool, and each thread fetches Message out from the queue, then processes them, and sends some info back to clients. Structure Message records the bufferevent that it comes from, so in those processing threads, I call bufferevent_write to send info back. (Hope I make this clear). But the client may close the connection, which results in that bufferevent structure is freed in event call back function (main thread). This results in crash in processing-threads when they try to send info back using a freed bufferevent. The way I use is putting bufferevent_free and bufferevent_write in a critical section (a global lock), and - when there is a connection established, record the newly created bufferevent (say a set) - in the critical section of bufferevent_free, delete that bev from that set - in the critical section of bufferevent_write, check whether that bev is in that set, if so call bufferevent_write But I think maybe this is not efficient, is there an easy way in libevent? Does bufferevent_lock/bufferent_unlock help? Thanks and Regards, Wenliang