diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 4d67b4ea71e69bf4828f05873e45c91d5233d429..46e94acc8ba08896f7ae872dc19d711181da021f 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -620,6 +620,11 @@ void connection_ap_expire_beginning(void) {
       continue;
     conn->num_retries++;
     circ = circuit_get_by_conn(conn);
+    if(!circ) { /* it's vanished? */
+      log_fn(LOG_INFO,"Conn is in connect-wait, but lost its circ.");
+      connection_mark_for_close(conn,0);
+      continue;
+    }
     if(circ->purpose == CIRCUIT_PURPOSE_C_REND_JOINED) {
       if (now - conn->timestamp_lastread > 45) {
         log_fn(LOG_WARN,"Rend stream is %d seconds late. Giving up.",