gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet] 01/03: RPS tests/profiler: Keep files for dumping


From: gnunet
Subject: [GNUnet-SVN] [gnunet] 01/03: RPS tests/profiler: Keep files for dumping internals open
Date: Wed, 28 Nov 2018 00:03:02 +0100

This is an automated email from the git hooks/post-receive script.

julius-buenger pushed a commit to branch master
in repository gnunet.

commit 3cb06d8896196df2238c2b6dda59ba871af8b276
Author: Julius Bünger <address@hidden>
AuthorDate: Wed Nov 28 00:00:05 2018 +0100

    RPS tests/profiler: Keep files for dumping internals open
---
 src/rps/gnunet-rps-profiler.c |  1 +
 src/rps/gnunet-service-rps.c  |  1 +
 src/rps/rps-test_util.c       | 99 +++++++++++++++++++++++++++++++++++++++++++
 src/rps/rps-test_util.h       | 40 ++++++++++++-----
 src/rps/test_rps.c            |  1 +
 5 files changed, 131 insertions(+), 11 deletions(-)

diff --git a/src/rps/gnunet-rps-profiler.c b/src/rps/gnunet-rps-profiler.c
index 5ccf1017e..35a77e1bb 100644
--- a/src/rps/gnunet-rps-profiler.c
+++ b/src/rps/gnunet-rps-profiler.c
@@ -1102,6 +1102,7 @@ shutdown_op (void *cls)
   {
     clean_peer (i);
   }
+  close_all_files();
 }
 
 static void
diff --git a/src/rps/gnunet-service-rps.c b/src/rps/gnunet-service-rps.c
index 20b314db3..f121db5b8 100644
--- a/src/rps/gnunet-service-rps.c
+++ b/src/rps/gnunet-service-rps.c
@@ -4556,6 +4556,7 @@ shutdown_task (void *cls)
     GNUNET_free (tmp_att_peer);
   }
 #endif /* ENABLE_MALICIOUS */
+  close_all_files();
 }
 
 
diff --git a/src/rps/rps-test_util.c b/src/rps/rps-test_util.c
index a6ea033cd..d0d195229 100644
--- a/src/rps/rps-test_util.c
+++ b/src/rps/rps-test_util.c
@@ -56,6 +56,105 @@ static char buf_unaligned;
  */
 static unsigned num_bits_buf_unaligned;
 
+static struct GNUNET_CONTAINER_MultiHashMap *open_files;
+
+
+
+/**
+ * @brief Get file handle
+ *
+ * If necessary, create file handle and store it with the other file handles.
+ *
+ * @param name Name of the file
+ *
+ * @return File handle
+ */
+struct GNUNET_DISK_FileHandle *
+get_file_handle (const char *name)
+{
+  struct GNUNET_HashCode hash;
+  struct GNUNET_DISK_FileHandle *fh;
+
+  if (NULL == open_files)
+  {
+    open_files = GNUNET_CONTAINER_multihashmap_create (16,
+        GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+  }
+  GNUNET_CRYPTO_hash (name,
+                      strnlen (name,
+                               512),
+                      &hash);
+  if (GNUNET_NO == GNUNET_CONTAINER_multihashmap_contains (open_files,
+                                                           &hash))
+  {
+    fh = GNUNET_DISK_file_open (name,
+                                GNUNET_DISK_OPEN_APPEND,
+                                GNUNET_DISK_PERM_USER_READ |
+                                GNUNET_DISK_PERM_USER_WRITE |
+                                GNUNET_DISK_PERM_GROUP_READ);
+    GNUNET_CONTAINER_multihashmap_put (open_files,
+                                       &hash,
+                                       fh,
+                                       
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+    return fh;
+  }
+  else
+  {
+    fh = GNUNET_CONTAINER_multihashmap_get (open_files,
+                                            &hash);
+    return fh;
+  }
+}
+
+
+/**
+ * @brief Closes the file of the current entry
+ *
+ * Implements #GNUNET_CONTAINER_HashMapIterator
+ *
+ * @param cls unused
+ * @param key unused
+ * @param value the file handle
+ *
+ * @return #GNUNET_YES if we should continue to
+ *         iterate,
+ *         #GNUNET_NO if not.
+ */
+int
+close_files_iter (void *cls,
+                  const struct GNUNET_HashCode *key,
+                  void *value)
+{
+  (void) cls;
+  (void) key;
+  struct GNUNET_DISK_FileHandle *fh = value;
+
+  if (NULL != fh)
+  {
+    GNUNET_DISK_file_close (fh);
+  }
+  return GNUNET_YES;
+}
+
+
+/**
+ * @brief Close all files that were opened with #get_file_handle
+ *
+ * @return Success of iterating over files
+ */
+int
+close_all_files ()
+{
+  int ret;
+
+  ret = GNUNET_CONTAINER_multihashmap_iterate (open_files,
+                                               close_files_iter,
+                                               NULL);
+  GNUNET_CONTAINER_multihashmap_destroy (open_files);
+  return ret;
+}
+
+
 
 void
 to_file_raw (const char *file_name, const char *buf, size_t size_buf)
diff --git a/src/rps/rps-test_util.h b/src/rps/rps-test_util.h
index a806f11cd..5dfcc5f6a 100644
--- a/src/rps/rps-test_util.h
+++ b/src/rps/rps-test_util.h
@@ -39,23 +39,43 @@ char *
 create_file (const char *name);
 
 /**
+ * @brief Get file handle
+ *
+ * If necessary, create file handle and store it with the other file handles.
+ *
+ * @param name Name of the file
+ *
+ * @return File handle
+ */
+struct GNUNET_DISK_FileHandle *
+get_file_handle (const char *name);
+
+/**
+ * @brief Close all files that were opened with #get_file_handle
+ *
+ * @return Success of iterating over files
+ */
+int
+close_all_files ();
+
+/**
  * This function is used to facilitate writing important information to disk
  */
 #ifdef TO_FILE
-#  define to_file(file_name, ...) do {char tmp_buf[512] = "";\
+#define to_file(file_name, ...) do {GNUNET_assert (NULL != file_name);\
+    char tmp_buf[512] = "";\
     int size;\
     size = GNUNET_snprintf(tmp_buf,sizeof(tmp_buf),__VA_ARGS__);\
     if (0 > size)\
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,\
            "Failed to create tmp_buf\n");\
     else\
-      GNUNET_DISK_fn_write(file_name, tmp_buf, strnlen(tmp_buf, 512),\
-                            GNUNET_DISK_PERM_USER_READ |\
-                            GNUNET_DISK_PERM_USER_WRITE |\
-                            GNUNET_DISK_PERM_GROUP_READ |\
-                            GNUNET_DISK_PERM_OTHER_READ);\
+      GNUNET_DISK_file_write (get_file_handle (file_name),\
+                              tmp_buf,\
+                              strnlen (tmp_buf, 512));\
   } while (0);
 
+
 #define to_file_w_len(file_name, len, ...) do {char tmp_buf[len];\
     int size;\
     memset (tmp_buf, 0, len);\
@@ -64,11 +84,9 @@ create_file (const char *name);
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,\
            "Failed to create tmp_buf\n");\
     else\
-      GNUNET_DISK_fn_write(file_name, tmp_buf, strnlen(tmp_buf, len), \
-                            GNUNET_DISK_PERM_USER_READ |\
-                            GNUNET_DISK_PERM_USER_WRITE |\
-                            GNUNET_DISK_PERM_GROUP_READ |\
-                            GNUNET_DISK_PERM_OTHER_READ);\
+      GNUNET_DISK_file_write (get_file_handle (file_name),\
+                              tmp_buf,\
+                              strnlen (tmp_buf, 512));\
   } while (0);
 #else /* TO_FILE */
 #  define to_file(file_name, ...)
diff --git a/src/rps/test_rps.c b/src/rps/test_rps.c
index 63a6007ae..72dc90b17 100644
--- a/src/rps/test_rps.c
+++ b/src/rps/test_rps.c
@@ -806,6 +806,7 @@ shutdown_op (void *cls)
       GNUNET_TESTBED_operation_done (rps_peers[i].op);
     }
   }
+  close_all_files();
 }
 
 

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]