static int stream_weight_less(const void *lhsx, const void *rhsx) { const nghttp2_stream *lhs, *rhs; lhs = nghttp2_struct_of(lhsx, nghttp2_stream, pq_entry); rhs = nghttp2_struct_of(rhsx, nghttp2_stream, pq_entry); return lhs->cycle < rhs->cycle; }
static int stream_less(const void *lhsx, const void *rhsx) { const nghttp2_stream *lhs, *rhs; lhs = nghttp2_struct_of(lhsx, nghttp2_stream, pq_entry); rhs = nghttp2_struct_of(rhsx, nghttp2_stream, pq_entry); if (lhs->cycle == rhs->cycle) { return lhs->seq < rhs->seq; } if (lhs->cycle < rhs->cycle) { return rhs->cycle - lhs->cycle <= NGHTTP2_MAX_CYCLE_DISTANCE; } return lhs->cycle - rhs->cycle > NGHTTP2_MAX_CYCLE_DISTANCE; }
nghttp2_outbound_item * nghttp2_stream_next_outbound_item(nghttp2_stream *stream) { nghttp2_pq_entry *ent; for (;;) { if (stream_active(stream)) { return stream->item; } ent = nghttp2_pq_top(&stream->obq); if (!ent) { return NULL; } stream = nghttp2_struct_of(ent, nghttp2_stream, pq_entry); } }
nghttp2_outbound_item * nghttp2_stream_next_outbound_item(nghttp2_stream *stream) { nghttp2_pq_entry *ent; nghttp2_stream *si; for (;;) { if (stream_active(stream)) { /* Update ascendant's descendant_last_cycle here, so that we can assure that new stream is scheduled based on it. */ for (si = stream; si->dep_prev; si = si->dep_prev) { si->dep_prev->descendant_last_cycle = si->cycle; } return stream->item; } ent = nghttp2_pq_top(&stream->obq); if (!ent) { return NULL; } stream = nghttp2_struct_of(ent, nghttp2_stream, pq_entry); } }