qdr_error_from_pn on error.c is allocating qdr_error_t on the hot path ie AMQP_disposition_handler: saving those allocations would reduce CPU usage (and cache misses) on both core and worker threads, making the router able to scale better while under load.
Initial tests has shown some improvements under load (ie with core CPU thread ~97% with the new version and ~99% with master):
12 pairs master (no lock-free queues, no qdr_error_t fix): 285 K msg/sec
12 pairs master (no lock-free queues, yes qdr_error_t fix): 402 K msg/sec
12 pairs lock-free q (no qdr_error_t fix): 311 K msg/sec
12 pairs lock-free q (yes qdr_error_t fix): 510 K msg/sec