return 0;
}
if (remove || auth_client_request_is_aborted(request))
- hash_table_remove(conn->requests, POINTER_CAST(id));
+ auth_client_connection_remove_request(request->conn, request);
*request_r = request;
return 1;
}
void auth_client_connection_remove_request(struct auth_client_connection *conn,
- unsigned int id)
+ struct auth_client_request *request)
{
+ if (request->removed)
+ return;
i_assert(conn->conn.handshake_received);
- hash_table_remove(conn->requests, POINTER_CAST(id));
+ hash_table_remove(conn->requests, POINTER_CAST(request->id));
+ request->removed = TRUE;
}
auth_request_callback_t *callback;
void *context;
+
+ bool removed:1;
};
struct auth_client_connection {
auth_client_connection_add_request(struct auth_client_connection *conn,
struct auth_client_request *request);
void auth_client_connection_remove_request(struct auth_client_connection *conn,
- unsigned int id);
+ struct auth_client_request *request);
#endif
*_request = NULL;
+ auth_client_connection_remove_request(request->conn, request);
+
timeout_remove(&request->to_fail);
event_unref(&request->event);
pool_unref(&request->pool);
auth_client_send_cancel(request->conn->client, request->id);
call_callback(request, AUTH_REQUEST_STATUS_ABORT, NULL, NULL);
- /* remove the request */
- auth_client_connection_remove_request(request->conn, request->id);
auth_client_request_free(&request);
}