hmmm, you should not take a reference to stack auto-allocated objects
that crosses function boundaries

Hence, two solutions at first glance:
- make these two static and move them out of function bodies
- allocate them on the heap using malloc/calloc and don't forget to
free at the end

Guillaume

2009/3/6 Brian <ping...@gmail.com>:
> No fork() involved actually. Here is an example code
>
> #include1.c
>
> void func1() {
>    struct event ev;
>    event_set(&ev, /*udp socket*/);
>    event_add(ev, NULL);
> }
>
> #include2.c
>
> void func2() {
>    struct event ev;
>    event_set(&ev, /*tcp socket*/);
>    event_add(&ev, NULL);
> }
>
> #main.c
> int main() {
>    event_init();
>    func1();
>    func2();
>    event_dispatch();
> }
>
> Both are setup using EV_READ | EV_PERSIST... again, UDP works fine,
> but TCP segfaults. I have to maintain a few servers running this
> program so I'd like to be able to use the distributed lib instead of
> having to maintain my own builds across multiple platforms. And with
> this working fine by doing all of event_init() event_dispatch() in
> each function (doing the event setup within it's own thread for the
> TCP socket) both servers worked fine. It's only when I try to
> implement them both together in what appears to be a proper
> implementation that I get this error.
>
> Thank you,
>
> -brian
>
>
>
> On Fri, Mar 6, 2009 at 3:20 AM, Niels Provos <pro...@gmail.com> wrote:
>> On Thu, Mar 5, 2009 at 9:10 AM, Brian <ping...@gmail.com> wrote:
>>> I have a thread safe application that I am using to host a UDP service
>>> on. This program also has a TCP based admin process to grab stats and
>>> update internals for the program during run-time. Before I had
>>> event_init() event_dispatch() running in their own threads, but I
>>> wanted to make things more proper. So in main() I have event_init()
>>> and event_dispatch() while performing event_set() and event_add() in
>>> their own respected processes. This has structure has multiple
>>> benefits for me. I am on an Ubuntu feisty install. Everything still
>>> works with UDP perfectly, however when I attempt to connect to the TCP
>>> port epoll_dispatch() SIGSEGV's
>>
>> When you say in "in their own respected processes", does that mean you
>> fork?  After fork you need to call event_reinit() to setup the epoll
>> structures again.   The epoll fd does not survive across forks.   You
>> will have to upgrade to libevent-1.4.x for that.
>>
>> Niels.
>>
> _______________________________________________
> Libevent-users mailing list
> Libevent-users@monkey.org
> http://monkeymail.org/mailman/listinfo/libevent-users
>
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users

Reply via email to