Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Don't rely on random to generate temporary file names.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 28 Feb 2019 14:35:19 +0000 (15:35 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 28 Feb 2019 15:01:39 +0000 (16:01 +0100)
src/smpi/internals/smpi_memory.cpp

index 14214de..49e4ab1 100644 (file)
@@ -184,10 +184,16 @@ smpi_privatization_region_t smpi_init_global_memory_segment_process()
   char path[24];
   int status;
 
-  do {
-    snprintf(path, sizeof(path), "/smpi-buffer-%06x", rand() % 0xffffffU);
+  constexpr unsigned VAL_MASK = 0xffffffU;
+  static unsigned prev_val    = VAL_MASK;
+  for (unsigned i = (prev_val + 1) & VAL_MASK; i != prev_val; i = (i + 1) & VAL_MASK) {
+    snprintf(path, sizeof(path), "/smpi-buffer-%06x", i);
     file_descriptor = shm_open(path, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
-  } while (file_descriptor == -1 && errno == EEXIST);
+    if (file_descriptor != -1 || errno != EEXIST) {
+      prev_val = i;
+      break;
+    }
+  }
   if (file_descriptor < 0) {
     if (errno == EMFILE) {
       xbt_die("Impossible to create temporary file for memory mapping: %s\n\