A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
do not allocate 0 sized buffers which won't be copied/freed after
[simgrid.git]
/
src
/
smpi
/
smpi_base.c
diff --git
a/src/smpi/smpi_base.c
b/src/smpi/smpi_base.c
index
0960c41
..
f5a2192
100644
(file)
--- a/
src/smpi/smpi_base.c
+++ b/
src/smpi/smpi_base.c
@@
-197,7
+197,7
@@
static MPI_Request build_request(void *buf, int count,
if(datatype->has_subtype == 1){
// This part handles the problem of non-contiguous memory
old_buf = buf;
if(datatype->has_subtype == 1){
// This part handles the problem of non-contiguous memory
old_buf = buf;
- buf = xbt_malloc(count*smpi_datatype_size(datatype));
+ buf =
count==0 ? NULL :
xbt_malloc(count*smpi_datatype_size(datatype));
if (flags & SEND) {
subtype->serialize(old_buf, buf, count, datatype->substruct);
}
if (flags & SEND) {
subtype->serialize(old_buf, buf, count, datatype->substruct);
}
@@
-362,7
+362,7
@@
void smpi_mpi_start(MPI_Request request)
request->refcount++;
if(request->old_type->has_subtype == 0){
oldbuf = request->buf;
request->refcount++;
if(request->old_type->has_subtype == 0){
oldbuf = request->buf;
- if (oldbuf){
+ if (oldbuf
&& request->size!=0
){
request->buf = xbt_malloc(request->size);
memcpy(request->buf,oldbuf,request->size);
}
request->buf = xbt_malloc(request->size);
memcpy(request->buf,oldbuf,request->size);
}
@@
-600,8
+600,8
@@
int smpi_mpi_test(MPI_Request * request, MPI_Status * status) {
else
flag = simcall_comm_test((*request)->action);
if(flag) {
else
flag = simcall_comm_test((*request)->action);
if(flag) {
- (*request)->refcount++;
finish_wait(request, status);
finish_wait(request, status);
+ request=MPI_REQUEST_NULL;
}else{
smpi_empty_status(status);
}
}else{
smpi_empty_status(status);
}
@@
-807,6
+807,7
@@
int smpi_mpi_waitall(int count, MPI_Request requests[],
index = smpi_mpi_waitany(count, requests, pstat);
if (index == MPI_UNDEFINED)
break;
index = smpi_mpi_waitany(count, requests, pstat);
if (index == MPI_UNDEFINED)
break;
+ requests[index]=MPI_REQUEST_NULL;
}
if (status != MPI_STATUSES_IGNORE) {
status[index] = *pstat;
}
if (status != MPI_STATUSES_IGNORE) {
status[index] = *pstat;
@@
-835,6
+836,7
@@
int smpi_mpi_waitsome(int incount, MPI_Request requests[], int *indices,
if(status != MPI_STATUSES_IGNORE) {
status[index] = *pstat;
}
if(status != MPI_STATUSES_IGNORE) {
status[index] = *pstat;
}
+ requests[index]=MPI_REQUEST_NULL;
}else{
return MPI_UNDEFINED;
}
}else{
return MPI_UNDEFINED;
}
@@
-859,6
+861,8
@@
int smpi_mpi_testsome(int incount, MPI_Request requests[], int *indices,
if(status != MPI_STATUSES_IGNORE) {
status[i] = *pstat;
}
if(status != MPI_STATUSES_IGNORE) {
status[i] = *pstat;
}
+ requests[i]=MPI_REQUEST_NULL;
+
}
}else{
count_dead++;
}
}else{
count_dead++;