Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[pvs-studio] Make it clear that free'd pointers are not used anymore.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 19 Jul 2021 20:25:38 +0000 (22:25 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 19 Jul 2021 20:35:39 +0000 (22:35 +0200)
src/smpi/internals/smpi_shared.cpp
src/smpi/mpi/smpi_datatype.cpp

index e66a618..2c120fb 100644 (file)
@@ -453,7 +453,7 @@ void smpi_shared_free(void *ptr)
     if (data->count <= 0) {
       close(data->fd);
       allocs.erase(allocs.find(meta->second.data->first));
-      allocs_metadata.erase(ptr);
+      allocs_metadata.erase(meta);
       XBT_DEBUG("Shared free - Local - with removal - of %p", ptr);
     } else {
       XBT_DEBUG("Shared free - Local - no removal - of %p, count = %d", ptr, data->count);
@@ -467,7 +467,7 @@ void smpi_shared_free(void *ptr)
       munmap(ptr, meta->second.size);
       if(meta->second.data->second.count==0){
         delete meta->second.data;
-        allocs_metadata.erase(ptr);
+        allocs_metadata.erase(meta);
       }
     }else{
       xbt_free(ptr);
index a30b964..097aaf7 100644 (file)
@@ -180,6 +180,9 @@ int Datatype::copy_attrs(Datatype* datatype){
     } else if (elem.copy_fn.type_copy_fn != MPI_NULL_COPY_FN) {
       ret = elem.copy_fn.type_copy_fn(datatype, it.first, elem.extra_state, it.second, &value_out, &flag);
     }
+    if (ret != MPI_SUCCESS)
+      return ret;
+
     if (elem.copy_fn.type_copy_fn_fort != MPI_NULL_COPY_FN) {
       value_out = xbt_new(int, 1);
       if (*(int*)*elem.copy_fn.type_copy_fn_fort == 1) { // MPI_TYPE_DUP_FN
@@ -188,11 +191,11 @@ int Datatype::copy_attrs(Datatype* datatype){
       } else { // not null, nor dup
         elem.copy_fn.type_copy_fn_fort(datatype, it.first, elem.extra_state, it.second, value_out, &flag, &ret);
       }
-      if (ret != MPI_SUCCESS)
+      if (ret != MPI_SUCCESS) {
         xbt_free(value_out);
+        return ret;
+      }
     }
-    if (ret != MPI_SUCCESS)
-      return ret;
     if (flag) {
       elem.refcount++;
       attributes().emplace(it.first, value_out);