+static void action_send(xbt_dynar_t action)
+{
+ char *name = NULL;
+ char to[250];
+ char *size_str = xbt_dynar_get_as(action, 3, char *);
+ double size=parse_double(size_str);
+ double clock = MSG_get_clock(); /* this "call" is free thanks to inlining */
+
+ sprintf(to, "%s_%s", MSG_process_get_name(MSG_process_self()),
+ xbt_dynar_get_as(action, 2, char *));
+ // char *to = xbt_dynar_get_as(action, 2, char *);
+
+ if (XBT_LOG_ISENABLED(actions, xbt_log_priority_verbose))
+ name = xbt_str_join(action, " ");
+
+#ifdef HAVE_TRACING
+ int rank = get_rank(MSG_process_get_name(MSG_process_self()));
+ int dst_traced = get_rank(xbt_dynar_get_as(action, 2, char *));
+ TRACE_smpi_ptp_in(rank, rank, dst_traced, "send");
+ TRACE_smpi_send(rank, rank, dst_traced);
+#endif
+
+ DEBUG2("Entering Send: %s (size: %lg)", name, size);
+ if (size<65536) {
+ action_Isend(action);
+ } else {
+ MSG_task_send(MSG_task_create(name, 0, size, NULL), to);
+ }
+
+ VERB2("%s %f", name, MSG_get_clock() - clock);
+
+ if (XBT_LOG_ISENABLED(actions, xbt_log_priority_verbose))
+ free(name);
+
+#ifdef HAVE_TRACING
+ TRACE_smpi_ptp_out(rank, rank, dst_traced, "send");
+#endif
+
+ asynchronous_cleanup();
+}
+
+static void action_Isend(xbt_dynar_t action)