Thanks Guillaume for the feedback. Unfortunately malloc/calloc method
didn't work for me. I think I will just go back to how it was. Does
anyone know if there is an inherent flaw, perhaps, with doing the
event_init()/event_dispatch() within a posix thread?

-brian



On Fri, Mar 6, 2009 at 8:59 AM, Guillaume Teissier
<guillaume.teissier.pas.le.p...@gmail.com> wrote:
> 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