A combination of techniques to prevent deadlocks and livelocks in a
computer system having a dispatcher and multiple downstream command
queues. In one embodiment, a broadcast transaction that requires
simultaneously available space in all the affected downstream command
queues becomes a delayed transaction, so that the command queues are
reserved and other transactions are retried until the broadcast
transaction is completed. In another embodiment, a bail-out timer is used
to defer a transaction if the transaction does not complete within a
predetermined time. In yet another embodiment, a locked transaction that
potentially addresses memory space controlled by a programmable attribute
map is handled as a delayed transaction if there is less than a
predetermined amount of downstream buffer space available for the
transaction.