*/
if (!query->treq) return;
+ /*
+ * The query needs to be parented by the treq so that it still
+ * exists when the cancel_mux callback is run.
+ */
+ talloc_steal(query->treq, query);
+
fr_trunk_request_signal_cancel(query->treq);
/*
* the trunk code.
*/
query->treq = NULL;
-
}
#define SET_LDAP_CTRLS(_dest, _src) \
switch (fr_trunk_request_enqueue(&query->treq, ttrunk->trunk, request, query, NULL)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
- /*
- * Ensure the query ctx will last until the trunk request frees its children
- */
- talloc_reference(query->treq, query);
break;
default:
switch (fr_trunk_request_enqueue(&query->treq, ttrunk->trunk, request, query, NULL)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
- /*
- * Ensure the query ctx will last until the trunk request frees its children
- */
- talloc_reference(query->treq, query);
break;
default:
switch (fr_trunk_request_enqueue(&query->treq, ttrunk->trunk, request, query, NULL)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
- /*
- * Ensure the query ctx will last until the trunk request frees its children
- */
- talloc_reference(query->treq, query);
break;
default:
switch (fr_trunk_request_enqueue(&query->treq, referral->ttrunk->trunk, request, query, NULL)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
- talloc_reference(query->treq, query);
break;
default:
switch (fr_trunk_request_enqueue(&query->treq, ttrunk->trunk, request, query, NULL)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
- talloc_reference(query->treq, query);
break;
default:
switch(fr_trunk_request_enqueue(&query->treq, ttrunk->trunk, request, query, NULL)) {
case FR_TRUNK_ENQUEUE_OK:
case FR_TRUNK_ENQUEUE_IN_BACKLOG:
- talloc_reference(query->treq, query);
break;
default: