}
void smpi_datatype_set_name(MPI_Datatype datatype, char* name){
+ if(datatype->name!=NULL && !(datatype->flags & DT_FLAG_PREDEFINED))
+ xbt_free(datatype->name);
datatype->name = xbt_strdup(name);;
}
void smpi_datatype_free(MPI_Datatype* type){
xbt_assert((*type)->in_use >= 0);
+
+ if((*type)->flags & DT_FLAG_PREDEFINED)return;
+
+ //if still used, mark for deletion
+ if((*type)->in_use!=0){
+ (*type)->flags |=DT_FLAG_DESTROYED;
+ return;
+ }
+
if((*type)->attributes !=NULL){
xbt_dict_cursor_t cursor = NULL;
int* key;
}
}
- if((*type)->flags & DT_FLAG_PREDEFINED)return;
-
- //if still used, mark for deletion
- if((*type)->in_use!=0){
- (*type)->flags |=DT_FLAG_DESTROYED;
- return;
- }
-
if ((*type)->sizeof_substruct != 0){
//((s_smpi_subtype_t *)(*type)->substruct)->subtype_free(type);
xbt_free((*type)->substruct);
}
- if ((*type)->name != NULL){
- xbt_free((*type)->name);
- }
+ xbt_free((*type)->name);
+ xbt_free(*type);
*type = MPI_DATATYPE_NULL;
}
}
if(type && type->in_use == 0){
- MPI_Datatype t = type;
- if (!(type->flags & DT_FLAG_DESTROYED))
- smpi_datatype_free(&type);
- if(t->flags & DT_FLAG_PREDEFINED) return;
- xbt_free(t);
+ smpi_datatype_free(&type);
}
#if HAVE_MC
if(MC_is_active())