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

[or-cvs] r15228: Explain how my emacs setup works in the HACKING file. Someon (in tor/trunk: doc src/or)



Author: nickm
Date: 2008-06-13 15:57:52 -0400 (Fri, 13 Jun 2008)
New Revision: 15228

Modified:
   tor/trunk/doc/HACKING
   tor/trunk/src/or/buffers.c
   tor/trunk/src/or/routerlist.c
Log:
Explain how my emacs setup works in the HACKING file. Someone else may care too.

Modified: tor/trunk/doc/HACKING
===================================================================
--- tor/trunk/doc/HACKING	2008-06-13 18:58:58 UTC (rev 15227)
+++ tor/trunk/doc/HACKING	2008-06-13 19:57:52 UTC (rev 15228)
@@ -41,6 +41,50 @@
   "--enable-gcc-warnings".  This will give a bunch of extra warning flags to
   the compiler, and help us find divergences from our preferred C style.
 
+1.0.1. Getting emacs to edit Tor source properly.
+
+  Hi, folks!  Nick here.  I like to put the following snippet in my .emacs
+  file:
+    (add-hook 'c-mode-hook
+          (lambda ()
+            (font-lock-mode 1)
+            (set-variable 'show-trailing-whitespace t)
+
+            (let ((fname (expand-file-name (buffer-file-name))))
+              (cond
+               ((string-match "^/home/nickm/src/libevent" fname)
+                (set-variable 'indent-tabs-mode t)
+                (set-variable 'c-basic-offset 4)
+                (set-variable 'tab-width 4))
+               ((string-match "^/home/nickm/src/tor" fname)
+                (set-variable 'indent-tabs-mode nil)
+                (set-variable 'c-basic-offset 2))
+               ((string-match "^/home/nickm/src/openssl" fname)
+                (set-variable 'indent-tabs-mode t)
+                (set-variable 'c-basic-offset 8)
+                (set-variable 'tab-width 8))
+            ))))
+
+  You'll note that it defaults to showing all trailing whitespace.  The
+  "cond" test detects whether the file is one of a few C free software
+  projects that I often edit, and sets up the indentation level and tab
+  preferences to match what they want.
+
+  If you want to try this out, you'll need to change the filename regex
+  patterns to match where you keep your Tor files.
+
+  If you *only* use emacs to edit Tor, you could always just say:
+
+    (add-hook 'c-mode-hook
+          (lambda ()
+            (font-lock-mode 1)
+            (set-variable 'show-trailing-whitespace t)
+            (set-variable 'indent-tabs-mode nil)
+            (set-variable 'c-basic-offset 2)))
+
+  There is probably a better way to do this.  No, we are probably not going
+  to clutter the files with emacs stuff.
+
 1.1. Details
 
   Use tor_malloc, tor_free, tor_strdup, and tor_gettimeofday instead of their

Modified: tor/trunk/src/or/buffers.c
===================================================================
--- tor/trunk/src/or/buffers.c	2008-06-13 18:58:58 UTC (rev 15227)
+++ tor/trunk/src/or/buffers.c	2008-06-13 19:57:52 UTC (rev 15228)
@@ -22,7 +22,6 @@
 #include <sys/uio.h>
 #endif
 
-
 //#define PARANOIA
 //#define NOINLINE
 
@@ -762,7 +761,6 @@
   write_result = tor_socket_send(s, chunk->data, sz, 0);
 #endif
 
-
   if (write_result < 0) {
     int e = tor_socket_errno(s);
     if (!ERRNO_IS_EAGAIN(e)) { /* it's a real error */

Modified: tor/trunk/src/or/routerlist.c
===================================================================
--- tor/trunk/src/or/routerlist.c	2008-06-13 18:58:58 UTC (rev 15227)
+++ tor/trunk/src/or/routerlist.c	2008-06-13 19:57:52 UTC (rev 15228)
@@ -82,8 +82,7 @@
 
 /* DOCDOC This is a massive massive kludge XXXX021 */
 static uint64_t sl_last_total_weighted_bw = 0;
-static double sl_last_guard_weight = 0.0;
-static double sl_last_exit_weight = 0.0;
+static uint64_t sl_last_weighted_bw_of_me = 0;
 
 /** Return the number of directory authorities whose type matches some bit set
  * in <b>type</b>  */
@@ -873,32 +872,20 @@
                                           double *v3_share_out)
 {
   routerinfo_t *me = router_get_my_routerinfo();
-  routerinfo_t *me_published;
   routerstatus_t *rs;
   const int pds_flags = PDS_ALLOW_SELF|PDS_IGNORE_FASCISTFIREWALL;
-  uint32_t bw;
   *v2_share_out = *v3_share_out = 0.0;
-  if (!me)
-    return -1;
-  me_published = router_get_by_digest(me->cache_info.identity_digest);
   rs = router_get_consensus_status_by_id(me->cache_info.identity_digest);
-  if (!rs || !me_published)
+  if (!me || !rs)
     return -1;
-  bw = me_published->bandwidthcapacity;
-  if (!rs->is_running)
-    return 0;
 
   /* Calling for side effect */
   if (rs->is_v2_dir) {
     sl_last_total_weighted_bw = 0;
     router_pick_directory_server(V2_AUTHORITY, pds_flags);
     if (sl_last_total_weighted_bw != 0) {
-      double share = (double)bw;
-      if (rs->is_exit)
-        share *= sl_last_exit_weight;
-      if (rs->is_possible_guard)
-        share *= sl_last_guard_weight;
-      *v2_share_out = share / U64_TO_DBL(sl_last_total_weighted_bw);
+      *v2_share_out = U64_TO_DBL(sl_last_weighted_bw_of_me) /
+        U64_TO_DBL(sl_last_total_weighted_bw);
     }
   }
 
@@ -906,12 +893,8 @@
     sl_last_total_weighted_bw = 0;
     router_pick_directory_server(V3_AUTHORITY, pds_flags);
     if (sl_last_total_weighted_bw != 0) {
-      double share = (double)bw;
-      if (rs->is_exit)
-        share *= sl_last_exit_weight;
-      if (rs->is_possible_guard)
-        share *= sl_last_guard_weight;
-      *v3_share_out = share / U64_TO_DBL(sl_last_total_weighted_bw);
+      *v3_share_out = U64_TO_DBL(sl_last_weighted_bw_of_me) /
+        U64_TO_DBL(sl_last_total_weighted_bw);
     }
   }
 
@@ -1482,6 +1465,7 @@
   bitarray_t *exit_bits;
   bitarray_t *guard_bits;
   uint32_t max_believable_bw = get_max_believable_bandwidth();
+  int me_idx = -1;
 
   /* Can't choose exit and guard at same time */
   tor_assert(rule == NO_WEIGHTING ||
@@ -1505,6 +1489,8 @@
     if (statuses) {
       /* need to extract router info */
       status = smartlist_get(sl, i);
+      if (router_digest_is_me(status->identity_digest))
+        me_idx = i;
       router = router_get_by_digest(status->identity_digest);
       is_exit = status->is_exit;
       is_guard = status->is_possible_guard;
@@ -1518,6 +1504,8 @@
       }
     } else {
       router = smartlist_get(sl, i);
+      if (router_digest_is_me(router->cache_info.identity_digest))
+        me_idx = i;
       is_exit = router->is_exit;
       is_guard = router->is_possible_guard;
       this_bw = router_get_advertised_bandwidth(router);
@@ -1620,24 +1608,27 @@
       guard_weight = 0.0;
 
     total_bw = 0;
+    sl_last_weighted_bw_of_me = 0;
     for (i=0; i < (unsigned)smartlist_len(sl); i++) {
+      uint64_t bw;
       is_exit = bitarray_is_set(exit_bits, i);
       is_guard = bitarray_is_set(guard_bits, i);
       if (is_exit && is_guard)
-        total_bw += ((uint64_t)(bandwidths[i] * exit_weight * guard_weight));
+        bw = ((uint64_t)(bandwidths[i] * exit_weight * guard_weight));
       else if (is_guard)
-        total_bw += ((uint64_t)(bandwidths[i] * guard_weight));
+        bw = ((uint64_t)(bandwidths[i] * guard_weight));
       else if (is_exit)
-        total_bw += ((uint64_t)(bandwidths[i] * exit_weight));
+        bw = ((uint64_t)(bandwidths[i] * exit_weight));
       else
-        total_bw += bandwidths[i];
+        bw = bandwidths[i];
+      total_bw += bw;
+      if (i == (unsigned) me_idx)
+        sl_last_weighted_bw_of_me = bw;
     }
   }
 
   /* XXXX021 this is a kludge to expose these values. */
   sl_last_total_weighted_bw = total_bw;
-  sl_last_guard_weight = guard_weight;
-  sl_last_exit_weight = exit_weight;
 
   log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
             ", exit bw = "U64_FORMAT