simgrid_load_platform(argv[1]);
+ sg_host_t* host_list = sg_host_list();
+ size_t host_count = sg_host_count();
+ unsigned* seed = xbt_new(unsigned, host_count);
+ for (size_t i = 0; i < host_count; i++) {
+ seed[i] = i;
+ rand_r(&seed[i]);
+ sg_host_set_data(host_list[i], &seed[i]);
+ }
+ xbt_free(host_list);
+
simgrid_register_function("tracker", tracker_run);
simgrid_register_function("peer", peer_run);
simgrid_run();
+ xbt_free(seed);
return 0;
}
{
peer_t peer = xbt_new(s_peer_t, 1);
peer->id = id;
+ peer->seedp = sg_host_get_data(sg_host_self());
char mailbox_name[MAILBOX_SIZE];
snprintf(mailbox_name, MAILBOX_SIZE - 1, "%d", id);
}
xbt_assert(nb_interesting_pieces != 0);
// get a random interesting piece
- int random_piece_index = rand() % nb_interesting_pieces;
+ int random_piece_index = rand_r(peer->seedp) % nb_interesting_pieces;
int current_index = 0;
for (unsigned int i = 0; i < FILE_PIECES; i++) {
if (peer_has_not_piece(peer, i) && connection_has_piece(remote_peer, i)) {
}
xbt_assert(nb_interesting_pieces != 0);
// get a random interesting piece
- int random_piece_index = rand() % nb_interesting_pieces;
+ int random_piece_index = rand_r(peer->seedp) % nb_interesting_pieces;
int current_index = 0;
for (unsigned int i = 0; i < FILE_PIECES; i++) {
if (peer_has_not_piece(peer, i) && connection_has_piece(remote_peer, i) &&
// get a random rarest piece
int random_rarest_index = 0;
if (nb_min_pieces > 0) {
- random_rarest_index = rand() % nb_min_pieces;
+ random_rarest_index = rand_r(peer->seedp) % nb_min_pieces;
}
for (unsigned int i = 0; i < FILE_PIECES; i++) {
if (peer->pieces_count[i] == min && peer_has_not_piece(peer, i) && connection_has_piece(remote_peer, i) &&
// We choose a random peer to unchoke.
int id_chosen = 0;
if (xbt_dict_length(peer->connected_peers) > 0) {
- id_chosen = rand() % xbt_dict_length(peer->connected_peers);
+ id_chosen = rand_r(peer->seedp) % xbt_dict_length(peer->connected_peers);
}
int i = 0;
connection_t connection;
double deadline = xbt_str_parse_double(argv[1], "Invalid deadline");
xbt_assert(deadline > 0, "Wrong deadline supplied");
+ unsigned* seedp = sg_host_get_data(sg_host_self());
// Building peers array
xbt_dynar_t peers_list = xbt_dynar_new(sizeof(int), NULL);
int peers_length = (int)xbt_dynar_length(peers_list);
for (int i = 0; i < MAXIMUM_PEERS && i < peers_length; i++) {
do {
- next_peer = xbt_dynar_get_as(peers_list, rand() % peers_length, int);
+ next_peer = xbt_dynar_get_as(peers_list, rand_r(seedp) % peers_length, int);
} while (is_in_list(ta->peers, next_peer));
xbt_dynar_push_as(ta->peers, int, next_peer);
}