+ INFO1("Wait for peers for a while. I need %d peers",xbt_dict_size(pals_int));
+ while (xbt_dynar_length(peers)<xbt_dict_size(pals_int)) {
+ TRY {
+ gras_msg_handle(20);
+ } CATCH(e) {
+ xbt_dynar_foreach(peers,cursor,peer){
+ xbt_dict_remove(pals_int,peer->name);
+ }
+ char *peer_name;
+ void *data;
+ xbt_dict_foreach(pals_int,dict_cursor,peer_name,data) {
+ INFO1("Peer %s didn't showed up",peer_name);
+ }
+ RETHROW;
+ }
+ }
+ INFO1("Got my %ld peers", xbt_dynar_length(peers));
+ xbt_dict_free(&pals_int);
+
+ /* Check who came */
+ xbt_dict_t pals = xbt_dict_new();
+ gras_socket_t pal;
+ xbt_dynar_foreach(peers,cursor, peer) {
+ //INFO1("%s is here",peer->name);
+ gras_socket_t sock = gras_socket_client(peer->name,peer->port);
+ xbt_dict_set(pals,peer->name,sock,NULL);
+ }
+ /* check that we have a dude for every element of the trace */
+ xbt_dynar_foreach(cmds,cursor,cmd) {
+ if (0) {
+ char *str = xbt_workload_elm_to_string(cmd);
+ INFO1("%s",str);
+ free(str);
+ }
+
+ pal=xbt_dict_get_or_null(pals,cmd->who);
+ if (!pal) {
+ CRITICAL1("Process %s didn't came! Abording!",cmd->who);
+ amok_pm_group_shutdown("replay");
+ xbt_dynar_free(&cmds);
+ gras_exit();
+ abort();
+ }
+ gras_msg_send(pal,"commands",&cmds);
+ }
+ INFO0("Sent commands to every processes. Let them start now");
+ xbt_dict_cursor_t dict_it;
+ char *pal_name;
+ xbt_dict_foreach(pals,dict_it,pal_name,pal) {
+ gras_msg_send(pal,"go",NULL);
+ }
+ INFO0("They should be started by now.");