+void Request::init_buffer(int count){
+ void *old_buf = nullptr;
+// FIXME Handle the case of a partial shared malloc.
+ // This part handles the problem of non-contiguous memory (for the unserialization at the reception)
+ if ((((flags_ & MPI_REQ_RECV) != 0) && ((flags_ & MPI_REQ_ACCUMULATE) != 0)) || (old_type_->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*old_type_->size());
+ if ((old_type_->flags() & DT_FLAG_DERIVED) && ((flags_ & MPI_REQ_SEND) != 0)) {
+ old_type_->serialize(old_buf, buf_, count);
+ }
+ }
+ }
+ old_buf_ = old_buf;
+}
+