{
fr_state_entry_t *entry, *old;
fr_dlist_head_t data;
- fr_pair_t *vp;
+ fr_pair_t *state_ctx;
old = request_data_get(request, state, 0);
request_data_list_init(&data);
if (!fr_pair_list_empty(&request->session_state_pairs)) {
RDEBUG2("Saving &session-state");
log_request_pair_list(L_DBG_LVL_2, request, NULL, &request->session_state_pairs, "&session-state.");
- }
- MEM(vp = request_state_replace(request, NULL));
+#ifdef WITH_VERIFY_PTR
+ /*
+ * Double check all the session state pairs
+ * are parented correctly, else we'll get
+ * memory errors when we restore.
+ */
+ fr_pair_list_verify(__FILE__, __LINE__, request->session_state_ctx, &request->session_state_pairs);
+#endif
+ }
+ MEM(state_ctx = request_state_replace(request, NULL));
PTHREAD_MUTEX_LOCK(&state->mutex);
/*
PTHREAD_MUTEX_UNLOCK(&state->mutex);
RERROR("Creating state entry failed");
- talloc_free(request_state_replace(request, vp));
+ talloc_free(request_state_replace(request, state_ctx));
request_data_restore(request, &data); /* Put it back again */
return -1;
}
fr_assert(request->session_state_ctx);
entry->seq_start = request->seq_start;
- entry->ctx = vp;
+ entry->ctx = state_ctx;
fr_dlist_move(&entry->data, &data);
PTHREAD_MUTEX_UNLOCK(&state->mutex);