On Wed, Nov 3, 2010 at 10:48 AM, Tim Kroeger
<tim.kroe...@cevis.uni-bremen.de> wrote:
> On Fri, 22 Oct 2010, John Peterson wrote:
>
> Also, in the code that you mentioned, another thing happens which I think is
> dangerous: That is, you are having a
>
>        std::vector<Parallel::Request> node_send_requests;
>
> (and a number of similar vectors), and then, each time you want to send
> something, you do
>
>        node_send_requests.push_back(Parallel::request());
>        Parallel::send(...,node_send_requests.back(),...);
>
> While this looks perfectly alright, I noticed that there is a subtle problem
> with this (because I tried to do it the same way in my code and found it not
> working and traced it back), that is: push_back() may possibly have to
> re-allocate memory and copy all elements.  In that case, for all previous
> requests, the copy constructor will be called, and then the destructor.  But
> the destructor calls MPI_Request_free(), which makes the copy become
> invalid.

Wow, yeah... this is a serious issue we should resolve ASAP.  It's
like having an auto_ptr in an STL container ... a big C++ no-no.

What do you think Roy?

We could change the Request class's destructor so that it does not
attempt to manage the lifetime... as I understand it, it's not
necessary to call MPI_Request_free unless you want to actually cancel
an Isend/Irecv operation.  So for that we could have an explicit
Request::free() interface.  Otherwise I don't think we leak memory
since there is no malloc/new in the first place.

-- 
John

------------------------------------------------------------------------------
Achieve Improved Network Security with IP and DNS Reputation.
Defend against bad network traffic, including botnets, malware, 
phishing sites, and compromised hosts - saving your company time, 
money, and embarrassment.   Learn More! 
http://p.sf.net/sfu/hpdev2dev-nov
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to