XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_comm, smpi,
"Logging specific to SMPI (comm)");
-
-
+//number of bytes to hold an int converted in char*
+#define INTSIZEDCHAR (sizeof(int)*CHAR_BIT-1)/3 + 3
xbt_dict_t smpi_comm_keyvals = NULL;
int comm_keyval_id=MPI_TAG_UB+1;//avoid collisions
}
int smpi_comm_attr_delete(MPI_Comm comm, int keyval){
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", keyval);
smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
if(!elem)
void * value;
int flag;
if(smpi_comm_attr_get(comm, keyval, &value, &flag)==MPI_SUCCESS){
- int ret = elem->delete_fn(comm, keyval, &value, &flag);
+ int ret = elem->delete_fn(comm, keyval, value, &flag);
if(ret!=MPI_SUCCESS) return ret;
}
}
}
int smpi_comm_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag){
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", keyval);
smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
if(!elem)
return MPI_SUCCESS;
}
TRY {
- char* tmpkey=xbt_malloc(sizeof(int));
- sprintf(tmpkey, "%d", keyval);
*(void**)attr_value = xbt_dict_get(comm->attributes, (const char*)tmpkey);
*flag=1;
}
int smpi_comm_attr_put(MPI_Comm comm, int keyval, void* attr_value){
if(!smpi_comm_keyvals)
smpi_comm_keyvals = xbt_dict_new();
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", keyval);
smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
if(!elem )
void* value;
smpi_comm_attr_get(comm, keyval, &value, &flag);
if(flag && elem->delete_fn!=MPI_NULL_DELETE_FN){
- int ret = elem->delete_fn(comm, keyval, &value, &flag);
+ int ret = elem->delete_fn(comm, keyval, value, &flag);
if(ret!=MPI_SUCCESS) return ret;
}
if(comm->attributes==NULL)
value->delete_fn=delete_fn;
*keyval = comm_keyval_id;
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", *keyval);
xbt_dict_set(smpi_comm_keyvals,(const char*)tmpkey,(void*)value, NULL);
comm_keyval_id++;
}
int smpi_comm_keyval_free(int* keyval){
- smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_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);
+ smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
+ if(!elem){
+ xbt_free(tmpkey);
+ return MPI_ERR_ARG;
+ }
xbt_dict_remove(smpi_comm_keyvals, (const char*)tmpkey);
xbt_free(elem);
xbt_free(tmpkey);