| 
					
				 | 
			
			
				@@ -756,7 +756,8 @@ run_scheduled_events(time_t now) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /* 0b. If we've deferred a signewnym, make sure it gets handled 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * eventually */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (signewnym_is_pending && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      time_of_last_signewnym + MAX_SIGNEWNYM_RATE < now) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      time_of_last_signewnym + MAX_SIGNEWNYM_RATE <= now) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    log(LOG_INFO, LD_CONTROL, "Honoring delayed NEWNYM request"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     circuit_expire_all_dirty_circs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     addressmap_clear_transient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     time_of_last_signewnym = now; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1389,9 +1390,15 @@ signal_callback(int fd, short events, void *arg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     case SIGNEWNYM: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       time_t now = time(NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (time_of_last_signewnym + MAX_SIGNEWNYM_RATE >= now) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (time_of_last_signewnym + MAX_SIGNEWNYM_RATE > now) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         signewnym_is_pending = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log(LOG_NOTICE, LD_CONTROL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "Rate limiting NEWNYM request: delaying by %d second(s)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (int)(MAX_SIGNEWNYM_RATE+time_of_last_signewnym-now)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* XXX refactor someday: these two calls are in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * run_scheduled_events() above too, and they should be in just 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         * one place. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         circuit_expire_all_dirty_circs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         addressmap_clear_transient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         time_of_last_signewnym = now; 
			 |