-
- VERB2("Contacted by %s:%d",dude->name,dude->port);
- xbt_dynar_push(group,&dude);
-
+ xbt_peer_t previous = NULL;
+
+ if (msg->rank >= 0 && xbt_dynar_length(group) >= msg->rank +1)
+ xbt_dynar_get_cpy(group,msg->rank,&previous);
+
+ VERB3("Contacted by %s:%d for rank %d",dude->name,dude->port,msg->rank);
+ if (msg->rank < 0) {
+ xbt_dynar_push(group,&dude);
+ } else {
+ if (previous)
+ THROW4(arg_error,0,"You wanted to get rank %d of group %s, but %s:%d is already there",
+ msg->rank, msg->group, previous->name, previous->port);
+ xbt_dynar_set(group,msg->rank,&dude);
+ }
+