#include "transport_private.h"
#include "gras/Virtu/virtu_sg.h"
-XBT_LOG_EXTERNAL_CATEGORY(transport);
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(trp_sg,transport,"SimGrid pseudo-transport");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras_trp_sg,gras_trp,"SimGrid pseudo-transport");
/***
*** Prototypes
gras_socket_t sock){
gras_hostdata_t *hd=(gras_hostdata_t *)MSG_host_get_data(MSG_host_self());
- gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_get("gras_trp");
+ gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_by_id(gras_trp_libdata_id);
gras_sg_portrec_t pr;
gras_trp_sg_sock_data_t *data;
- int found;
+ volatile int found;
const char *host=MSG_host_get_name(MSG_host_self());
sprintf(name,"Chunk[%d]",count++);
task_data=xbt_new(sg_task_data_t,1);
- task_data->data=(void*)xbt_malloc(size);
task_data->size = size;
- memcpy(task_data->data,data,size);
+ if (data) {
+ task_data->data=(void*)xbt_malloc(size);
+ memcpy(task_data->data,data,size);
+ } else {
+ task_data->data = NULL;
+ }
- task=MSG_task_create(name,0,((double)size)/(1024.0*1024.0),task_data);
+ task=MSG_task_create(name,0,((double)size),task_data);
DEBUG5("send chunk %s from %s to %s:%d (size=%ld)",
name, MSG_host_get_name(MSG_host_self()),
MSG_host_get_name(sock_data->to_host), sock_data->to_chan,size);
- if (MSG_task_put(task, sock_data->to_host,sock_data->to_chan) != MSG_OK) {
- THROW0(system_error,0,"Problem during the MSG_task_put");
+ if (MSG_task_put_with_timeout(task, sock_data->to_host,sock_data->to_chan,60.0) != MSG_OK) {
+ THROW0(system_error,0,"Problem during the MSG_task_put with timeout 60");
}
}
int gras_trp_sg_chunk_recv(gras_socket_t sock,
char *data,
unsigned long int size){
- gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_get("gras_trp");
+ gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_by_id(gras_trp_libdata_id);
m_task_t task=NULL;
sg_task_data_t *task_data;
DEBUG4("recv chunk on %s -> %s:%d (size=%ld)",
MSG_host_get_name(sock_data->to_host),
MSG_host_get_name(MSG_host_self()), sock_data->to_chan, size);
- if (MSG_task_get(&task, (sock->meas ? pd->measChan : pd->chan)) != MSG_OK)
+ if (MSG_task_get_with_time_out(&task,
+ (sock->meas ? pd->measChan : pd->chan),
+ 60) != MSG_OK)
THROW0(system_error,0,"Error in MSG_task_get()");
DEBUG1("Got chuck %s",MSG_task_get_name(task));
task_data->size, size,
MSG_host_get_name(sock_data->to_host),
MSG_host_get_name(MSG_host_self()), sock_data->to_chan);
- memcpy(data,task_data->data,size);
- free(task_data->data);
+ if (data)
+ memcpy(data,task_data->data,size);
+ if (task_data->data)
+ free(task_data->data);
free(task_data);
if (MSG_task_destroy(task) != MSG_OK)