- void *old_buf = nullptr;
-// FIXME Handle the case of a partial shared malloc.
- if ((((flags & MPI_REQ_RECV) != 0) && ((flags & MPI_REQ_ACCUMULATE) != 0)) || (datatype->flags() & DT_FLAG_DERIVED)) {
- // This part handles the problem of non-contiguous memory
- old_buf = const_cast<void*>(buf);
- if (count==0){
- buf_ = nullptr;
- }else {
- buf_ = xbt_malloc(count*datatype->size());
- if ((datatype->flags() & DT_FLAG_DERIVED) && ((flags & MPI_REQ_SEND) != 0)) {
- datatype->serialize(old_buf, buf_, count);
- }
- }
- }
- // This part handles the problem of non-contiguous memory (for the unserialization at the reception)
- old_buf_ = old_buf;
- size_ = datatype->size() * count;