[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r10851: free another string, and the buffer freelists, on exit. (tor/trunk/src/or)



Author: arma
Date: 2007-07-17 05:26:45 -0400 (Tue, 17 Jul 2007)
New Revision: 10851

Modified:
   tor/trunk/src/or/buffers.c
   tor/trunk/src/or/config.c
   tor/trunk/src/or/main.c
   tor/trunk/src/or/or.h
Log:
free another string, and the buffer freelists, on exit.


Modified: tor/trunk/src/or/buffers.c
===================================================================
--- tor/trunk/src/or/buffers.c	2007-07-17 07:24:37 UTC (rev 10850)
+++ tor/trunk/src/or/buffers.c	2007-07-17 09:26:45 UTC (rev 10851)
@@ -254,9 +254,10 @@
 }
 
 /** Remove elements from the freelists that haven't been needed since the
- * last call to this function. */
+ * last call to this function. If <b>free_all</b>, we're exiting and we
+ * should clear the whole lists. */
 void
-buf_shrink_freelists(void)
+buf_shrink_freelists(int free_all)
 {
   int j;
   for (j = 0; j < 2; ++j) {
@@ -267,8 +268,10 @@
       log_info(LD_GENERAL, "We haven't used %d/%d allocated %d-byte buffer "
                "memory chunks since the last call; freeing all but %d of them",
                list->lowwater, list->len, (int)list->chunksize, list->slack);
-      /* Skip over the slack and non-lowwater entries */
-      n_to_free = list->lowwater - list->slack;
+      if (free_all) /* Free every one of them */
+        n_to_free = list->len;
+      else /* Skip over the slack and non-lowwater entries */
+        n_to_free = list->lowwater - list->slack;
       n_to_skip = list->len - n_to_free;
       for (ptr = &list->list, i = 0; i < n_to_skip; ++i) {
         char *mem = *ptr;

Modified: tor/trunk/src/or/config.c
===================================================================
--- tor/trunk/src/or/config.c	2007-07-17 07:24:37 UTC (rev 10850)
+++ tor/trunk/src/or/config.c	2007-07-17 09:26:45 UTC (rev 10851)
@@ -715,21 +715,22 @@
 
 extern const char tor_svn_revision[]; /* from tor_main.c */
 
+static char *_version = NULL;
+
 /** Return the current Tor version, possibly */
 const char *
 get_version(void)
 {
-  static char *version = NULL;
-  if (version == NULL) {
+  if (_version == NULL) {
     if (strlen(tor_svn_revision)) {
       size_t len = strlen(VERSION)+strlen(tor_svn_revision)+8;
-      version = tor_malloc(len);
-      tor_snprintf(version, len, "%s (r%s)", VERSION, tor_svn_revision);
+      _version = tor_malloc(len);
+      tor_snprintf(_version, len, "%s (r%s)", VERSION, tor_svn_revision);
     } else {
-      version = tor_strdup(VERSION);
+      _version = tor_strdup(VERSION);
     }
   }
-  return version;
+  return _version;
 }
 
 /** Release all memory and resources held by global configuration structures.
@@ -746,6 +747,7 @@
     global_state = NULL;
   }
   tor_free(torrc_fname);
+  tor_free(_version);
 }
 
 /** If options->SafeLogging is on, return a not very useful string,

Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c	2007-07-17 07:24:37 UTC (rev 10850)
+++ tor/trunk/src/or/main.c	2007-07-17 09:26:45 UTC (rev 10851)
@@ -1046,7 +1046,7 @@
           buf_shrink(conn->inbuf);
       });
     clean_cell_pool();
-    buf_shrink_freelists();
+    buf_shrink_freelists(0);
     time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
   }
 
@@ -1767,6 +1767,7 @@
   circuit_free_all();
   entry_guards_free_all();
   connection_free_all();
+  buf_shrink_freelists(1);
   policies_free_all();
   if (!postfork) {
     config_free_all();

Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h	2007-07-17 07:24:37 UTC (rev 10850)
+++ tor/trunk/src/or/or.h	2007-07-17 09:26:45 UTC (rev 10851)
@@ -2149,7 +2149,7 @@
 void buf_free(buf_t *buf);
 void buf_clear(buf_t *buf);
 void buf_shrink(buf_t *buf);
-void buf_shrink_freelists(void);
+void buf_shrink_freelists(int free_all);
 
 size_t buf_datalen(const buf_t *buf);
 size_t buf_capacity(const buf_t *buf);