The problem is calling snmp_sess_close() inside the callback function. You
have to wait for snmp_sess_read() to finish before calling
snmp_sess_close(). Problem solved.
On Sat, May 14, 2011 at 10:58 AM, th exterit <thexte...@gmail.com> wrote:
> Hi there.
>
> I have two threads. The main thread sends snmp requests, the other
> receives responses. And I can only use snmp_sess_*() calls since it is
> multithreaded.
>
> I want to be able to send requests and forget about them until a response
> is detected on the socket. I want to do this so that I don't have to wait
> on responses as they could take a long time (might get timeout). This will
> slow things down considerably. Hence, that's why the receive thread will
> block on select() waiting for responses.
>
> In the main thread, I send the requests using snmp_sess_async_send(), where
> the callback function will be called in the receive thread after
> snmp_sess_read() is called (also in the receive thread).
>
> Basically, when I add a new snmp session (which are created for every snmp
> request) I get the session's socket fd and update a global fd_set so that
> the receive thread can call select() on it. I also use a pipe to wake up
> the receive thread and tell it to call select() again on the updated
> fd_set. Once the receive thread gets a response, I call snmp_sess_read() on
> the corresponding session which calls the callback function.
>
> I am using opaque pointers for sessions and only using snmp_sess_*() calls
> as per README.threads recommendation. However, I am getting segmentation
> faults when running my progam. It segfaults in the same place every time,
> which is _sess_read which is called by snmp_sess_read(). I am guessing both
> threads are trying to access the same data or something?
>
> One thing I noticed is that if I don't clean up the sessions with
> snmp_sess_close() then I do not get a segault. But obviously this is not
> good since I get "Too many open files" error as I'm not clearing the
> sessions. Hopefully this is a clue for someone.
>
> I thought maybe cleaning up the sessions in the receive thread as opposed
> to the main thread might have been the problem. So I tried cleaning any old
> sessions lying about in the main thread instead. Didn't work, same
> outcome. Seg fault on _sess_read().
>
> Anyway, here is the pertinent code - http://pastebin.com/5SAke4FA
> Hopefully you can see what I am trying to do. I would really appreciate
> any help on this.
>
> Thanks,
> T
>
>
>
------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders