Well, in my case anyway I was test()'ing a single receive several times, and that was leading to the message.

In Roy's case, especially the test file, the problem is having multiple irecv's happening.  Lookat the underlying request::handle_serialized_irecv implementation in boost/mpi/communicator.hpp - one recv is accomplished through several MPI_IRecv requests issued in sequence.  If you have several irecvs running at once, then one is likely to get the other's data as its length.  

In other words, if you want to receive multiple messages in the same tag, be sure to only have one IRecv() with that tag running at a time.  Data may only be transferred serially (not in parallel) over a single tag anyhow.

Hope that helps,
Walt


On Fri, Feb 21, 2014 at 10:41 AM, Walter Woods <woodswalben@gmail.com> wrote:
Hey,

Wasn't quite sure how to reply to Roy's e-mail since I was unsubscribed before, but saw it was recent so wanted to chime in.

I have this exact same problem.  What I find interesting is that in my case, where I call irecv() from a number of other ranks directly, but with any_tag:

    world.irecv(1, mpi::any_tag, data);

I only have issues when there are more processes than those I am listening to.  I find this to be especially odd.  The issue seems like the second receive (after the data count) is picking up a separate ISend's count.  I'm still looking into what the issue could be...

Thanks,
Walt