-#if 0
-/* Data exchange over measurement sockets */
-xbt_error_t gras_socket_meas_exchange(gras_socket_t peer,
- int sender,
- unsigned int timeout,
- unsigned long int expSize,
- unsigned long int msgSize) {
- unsigned int bytesTotal;
- static unsigned int count=0;
- m_task_t task=NULL;
- char name[256];
- gras_trp_sg_sock_data_t *sock_data = (gras_trp_sg_sock_data_t *)peer->data;
-
- gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_get("gras_trp");
- double startTime;
-
- startTime=gras_os_time(); /* used only in sender mode */
-
- for(bytesTotal = 0; bytesTotal < expSize; bytesTotal += msgSize) {
-
- if (sender) {
-
- sprintf(name,"meas data[%d]",count++);
-
- task=MSG_task_create(name,0,((double)msgSize)/(1024.0*1024.0),NULL);
-
- DEBUG5("%f:%s: gras_socket_meas_send(%f %s -> %s) BEGIN",
- gras_os_time(), MSG_process_get_name(MSG_process_self()),
- ((double)msgSize)/(1024.0*1024.0),
- MSG_host_get_name( MSG_host_self()), peer->peer_name);
-
- if (MSG_task_put(task, sock_data->to_host,sock_data->to_chan) != MSG_OK)
- RAISE0(system_error,"Problem during the MSG_task_put()");
-
- DEBUG5("%f:%s: gras_socket_meas_send(%f %s -> %s) END",
- gras_os_time(), MSG_process_get_name(MSG_process_self()),
- ((double)msgSize)/(1024.0*1024.0),
- MSG_host_get_name( MSG_host_self()), peer->peer_name);
-
- } else { /* we are receiver, simulate a select */
-
- task=NULL;
- DEBUG2("%f:%s: gras_socket_meas_recv() BEGIN\n",
- gras_os_time(), MSG_process_get_name(MSG_process_self()));
- do {
- if (MSG_task_Iprobe((m_channel_t) pd->measChan)) {
- if (MSG_task_get(&task, (m_channel_t) pd->measChan) != MSG_OK) {
- fprintf(stderr,"GRAS: Error in MSG_task_get()\n");
- return unknown_error;
- }
-
- if (MSG_task_destroy(task) != MSG_OK) {
- fprintf(stderr,"GRAS: Error in MSG_task_destroy()\n");
- return unknown_error;
- }
-
- DEBUG2("%f:%s: gras_socket_meas_recv() END\n",
- gras_os_time(), MSG_process_get_name(MSG_process_self()));
- break;
- } else {
- MSG_process_sleep(0.0001);
+ msg_got = xbt_fifo_shift(msg_procdata->msg_to_receive_queue);
+
+ SIMIX_mutex_lock(sock_data->mutex);
+ //SIMIX_mutex_lock(local_hd->mutex_port[sock->port]);
+/* ok, I'm here, you can continue the communication */
+ SIMIX_cond_signal(sock_data->cond);
+ //SIMIX_cond_signal(local_hd->cond_port[sock->port]);
+
+/* wait for communication end */
+ SIMIX_cond_wait(sock_data->cond,sock_data->mutex);
+ //SIMIX_cond_wait(local_hd->cond_port[sock->port],local_hd->mutex_port[sock->port]);
+
+
+ if (msg_got->payl_size != size)
+ THROW5(mismatch_error,0,
+ "Got %d bytes when %ld where expected (in %s->%s:%d)",
+ msg_got->payl_size, size,
+ SIMIX_host_get_name(sock_data->to_host),
+ SIMIX_host_get_name(SIMIX_host_self()), sock->peer_port);
+ if (data) {
+ memcpy(data,msg_got->payl,size);