Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Harden msg/app-bittorrent for parallel executions.
[simgrid.git] / examples / c / app-bittorrent / bittorrent-peer.c
index 55e2ed2..e66b37c 100644 (file)
@@ -38,6 +38,7 @@ static peer_t peer_init(int id, int seed)
 {
   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);
@@ -536,7 +537,7 @@ int select_piece_to_download(const_peer_t peer, const_connection_t remote_peer)
     }
     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)) {
@@ -562,7 +563,7 @@ int select_piece_to_download(const_peer_t peer, const_connection_t remote_peer)
     }
     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) &&
@@ -597,7 +598,7 @@ int select_piece_to_download(const_peer_t peer, const_connection_t remote_peer)
     // 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) &&
@@ -655,7 +656,7 @@ void update_choked_peers(peer_t peer)
         // 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;