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
store the int in a long-enough char array
[simgrid.git]
/
src
/
smpi
/
smpi_mpi_dt.c
diff --git
a/src/smpi/smpi_mpi_dt.c
b/src/smpi/smpi_mpi_dt.c
index
2a9a464
..
860e48c
100644
(file)
--- a/
src/smpi/smpi_mpi_dt.c
+++ b/
src/smpi/smpi_mpi_dt.c
@@
-10,7
+10,7
@@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
+#include <limits.h>
#include "private.h"
#include "smpi_mpi_dt_private.h"
#include "mc/mc.h"
#include "private.h"
#include "smpi_mpi_dt_private.h"
#include "mc/mc.h"
@@
-20,6
+20,7
@@
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi_dt, smpi,
"Logging specific to SMPI (datatype)");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi_dt, smpi,
"Logging specific to SMPI (datatype)");
+#define INTSIZEDCHAR (sizeof(int)*CHAR_BIT-1)/3 + 3
xbt_dict_t smpi_type_keyvals = NULL;
int type_keyval_id=0;//avoid collisions
xbt_dict_t smpi_type_keyvals = NULL;
int type_keyval_id=0;//avoid collisions
@@
-410,7
+411,7
@@
void smpi_datatype_free(MPI_Datatype* type){
int flag;
xbt_dict_foreach((*type)->attributes, cursor, key, value){
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)key);
int flag;
xbt_dict_foreach((*type)->attributes, cursor, key, value){
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)key);
- if(elem)
+ if(elem
&& elem->delete_fn
)
elem->delete_fn(*type, atoi((const char*)key), &value, &flag);
}
}
elem->delete_fn(*type, atoi((const char*)key), &value, &flag);
}
}
@@
-1669,7
+1670,7
@@
void smpi_op_apply(MPI_Op op, void *invec, void *inoutvec, int *len,
}
int smpi_type_attr_delete(MPI_Datatype type, int keyval){
}
int smpi_type_attr_delete(MPI_Datatype type, int keyval){
- char* tmpkey=xbt_malloc(
sizeof(int)
);
+ char* tmpkey=xbt_malloc(
INTSIZEDCHAR
);
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem)
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem)
@@
-1686,11
+1687,12
@@
int smpi_type_attr_delete(MPI_Datatype type, int keyval){
return MPI_ERR_ARG;
xbt_dict_remove(type->attributes, (const char*)tmpkey);
return MPI_ERR_ARG;
xbt_dict_remove(type->attributes, (const char*)tmpkey);
+ xbt_free(tmpkey);
return MPI_SUCCESS;
}
int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* flag){
return MPI_SUCCESS;
}
int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* flag){
- char* tmpkey=xbt_malloc(
sizeof(int)
);
+ char* tmpkey=xbt_malloc(
INTSIZEDCHAR
);
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem)
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem)
@@
-1701,7
+1703,7
@@
int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* fla
return MPI_SUCCESS;
}
TRY {
return MPI_SUCCESS;
}
TRY {
- char* tmpkey=xbt_malloc(
sizeof(int)
);
+ char* tmpkey=xbt_malloc(
INTSIZEDCHAR
);
sprintf(tmpkey, "%d", keyval);
*(void**)attr_value = xbt_dict_get(type->attributes, (const char*)tmpkey);
*flag=1;
sprintf(tmpkey, "%d", keyval);
*(void**)attr_value = xbt_dict_get(type->attributes, (const char*)tmpkey);
*flag=1;
@@
-1710,13
+1712,14
@@
int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* fla
*flag=0;
xbt_ex_free(ex);
}
*flag=0;
xbt_ex_free(ex);
}
+ xbt_free(tmpkey);
return MPI_SUCCESS;
}
int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value){
if(!smpi_type_keyvals)
smpi_type_keyvals = xbt_dict_new();
return MPI_SUCCESS;
}
int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value){
if(!smpi_type_keyvals)
smpi_type_keyvals = xbt_dict_new();
- char* tmpkey=xbt_malloc(
sizeof(int)
);
+ char* tmpkey=xbt_malloc(
INTSIZEDCHAR
);
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem )
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem )
@@
-1732,6
+1735,7
@@
int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value){
type->attributes=xbt_dict_new();
xbt_dict_set(type->attributes, (const char*)tmpkey, attr_value, NULL);
type->attributes=xbt_dict_new();
xbt_dict_set(type->attributes, (const char*)tmpkey, attr_value, NULL);
+ xbt_free(tmpkey);
return MPI_SUCCESS;
}
return MPI_SUCCESS;
}
@@
-1746,10
+1750,11
@@
int smpi_type_keyval_create(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delet
value->delete_fn=delete_fn;
*keyval = type_keyval_id;
value->delete_fn=delete_fn;
*keyval = type_keyval_id;
- char* tmpkey=xbt_malloc(
sizeof(int)
);
+ char* tmpkey=xbt_malloc(
INTSIZEDCHAR
);
sprintf(tmpkey, "%d", *keyval);
xbt_dict_set(smpi_type_keyvals,(const char*)tmpkey,(void*)value, NULL);
type_keyval_id++;
sprintf(tmpkey, "%d", *keyval);
xbt_dict_set(smpi_type_keyvals,(const char*)tmpkey,(void*)value, NULL);
type_keyval_id++;
+ xbt_free(tmpkey);
return MPI_SUCCESS;
}
return MPI_SUCCESS;
}
@@
-1757,9
+1762,10
@@
int smpi_type_keyval_free(int* keyval){
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)keyval);
if(!elem)
return MPI_ERR_ARG;
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)keyval);
if(!elem)
return MPI_ERR_ARG;
- char* tmpkey=xbt_malloc(
sizeof(int)
);
+ char* tmpkey=xbt_malloc(
INTSIZEDCHAR
);
sprintf(tmpkey, "%d", *keyval);
xbt_dict_remove(smpi_type_keyvals, (const char*)tmpkey);
xbt_free(elem);
sprintf(tmpkey, "%d", *keyval);
xbt_dict_remove(smpi_type_keyvals, (const char*)tmpkey);
xbt_free(elem);
+ xbt_free(tmpkey);
return MPI_SUCCESS;
}
return MPI_SUCCESS;
}