A method comprising: receiving, by a scheduler, a request for a window during which to send a data packet through a crossbar, wherein transmission of the data packet is dependent upon a pool of transmission credits; determining, by the scheduler, whether the pool of transmission credits is sufficient for transmitting the data packet; and the method being characterized in that: when it is determined that the pool of transmission credits is insufficient: determining, by the scheduler, whether to block the request or to speculatively arbitrate the window based on a value of a speculative request counter, wherein speculatively arbitrating the window comprises beginning to arbitrate the window for the data packet when the number of transmission credits is insufficient for transmitting the data packet, wherein the speculative request counter tracks the number of speculative requests currently being arbitrated, is adjusted each time speculative arbitration begins on a data packet and is adjusted in the opposite direction each time speculative arbitration of a data packet ends, wherein the determining of whether to block the request or to speculatively arbitrate the window is based on a comparison of the value of the speculative request counter to a threshold, and wherein the threshold is based on a pipeline depth of the scheduler. receiving, by a scheduler, a request for a window during which to send a data packet through a crossbar, wherein transmission of the data packet is dependent upon a pool of transmission credits; determining, by the scheduler, whether the pool of transmission credits is sufficient for transmitting the data packet; and the method being characterized in that: when it is determined that the pool of transmission credits is insufficient: determining, by the scheduler, whether to block the request or to speculatively arbitrate the window based on a value of a speculative request counter, wherein speculatively arbitrating the window comprises beginning to arbitrate the window for the data packet when the number of transmission credits is insufficient for transmitting the data packet, wherein the speculative request counter tracks the number of speculative requests currently being arbitrated, is adjusted each time speculative arbitration begins on a data packet and is adjusted in the opposite direction each time speculative arbitration of a data packet ends, wherein the determining of whether to block the request or to speculatively arbitrate the window is based on a comparison of the value of the speculative request counter to a threshold, and wherein the threshold is based on a pipeline depth of the scheduler. when it is determined that the pool of transmission credits is insufficient: determining, by the scheduler, whether to block the request or to speculatively arbitrate the window based on a value of a speculative request counter, wherein speculatively arbitrating the window comprises beginning to arbitrate the window for the data packet when the number of transmission credits is insufficient for transmitting the data packet, wherein the speculative request counter tracks the number of speculative requests currently being arbitrated, is adjusted each time speculative arbitration begins on a data packet and is adjusted in the opposite direction each time speculative arbitration of a data packet ends, wherein the determining of whether to block the request or to speculatively arbitrate the window is based on a comparison of the value of the speculative request counter to a threshold, and wherein the threshold is based on a pipeline depth of the scheduler.