|  | @@ -163,13 +163,17 @@ connection_cpu_process_inbuf(connection_t *conn)
 | 
	
		
			
				|  |  |        circ = circuit_get_by_circid_orconn(circ_id, p_conn);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (success == 0) {
 | 
	
		
			
				|  |  | -      debug(LD_OR,"decoding onionskin failed. (Old key or bad sw.) Closing.");
 | 
	
		
			
				|  |  | +      debug(LD_OR,"decoding onionskin failed. (Old key or bad software.) Closing.");
 | 
	
		
			
				|  |  |        if (circ)
 | 
	
		
			
				|  |  |          circuit_mark_for_close(circ);
 | 
	
		
			
				|  |  |        goto done_processing;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if (!circ) {
 | 
	
		
			
				|  |  | -      /*XXXX Why does this happen?*/
 | 
	
		
			
				|  |  | +      /* This happens because somebody sends us a destroy cell and the
 | 
	
		
			
				|  |  | +       * circuit goes away, while the cpuworker is working. This is also
 | 
	
		
			
				|  |  | +       * why our tag doesn't include a pointer to the circ, because we'd
 | 
	
		
			
				|  |  | +       * never know if it's still valid.
 | 
	
		
			
				|  |  | +       */
 | 
	
		
			
				|  |  |        debug(LD_OR,"processed onion for a circ that's gone. Dropping.");
 | 
	
		
			
				|  |  |        goto done_processing;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -259,7 +263,7 @@ cpuworker_main(void *data)
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (read_all(fd, question, ONIONSKIN_CHALLENGE_LEN, 1) != ONIONSKIN_CHALLENGE_LEN) {
 | 
	
		
			
				|  |  | -      info(LD_BUG,"read question failed. Exiting.");
 | 
	
		
			
				|  |  | +      err(LD_BUG,"read question failed. Exiting.");
 | 
	
		
			
				|  |  |        goto end;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |