This way a query that blocks for a longer time, and whose reference has
been dropped won't block subsequent lookups from finishing.
unsigned current_id;
sd_resolve_query* query_array[QUERIES_MAX];
unsigned current_id;
sd_resolve_query* query_array[QUERIES_MAX];
- unsigned n_queries, n_done;
+ unsigned n_queries, n_done, n_outstanding;
sd_event_source *event_source;
sd_event *event;
sd_event_source *event_source;
sd_event *event;
- n = resolve->n_queries + extra - resolve->n_done;
+ n = resolve->n_outstanding + extra;
n = CLAMP(n, WORKERS_MIN, WORKERS_MAX);
while (resolve->n_valid_workers < n) {
n = CLAMP(n, WORKERS_MIN, WORKERS_MAX);
while (resolve->n_valid_workers < n) {
+ assert(resolve->n_outstanding > 0);
+ resolve->n_outstanding--;
+
q = lookup_query(resolve, resp->id);
if (!q)
return 0;
q = lookup_query(resolve, resp->id);
if (!q)
return 0;
+ resolve->n_outstanding++;
+
+ resolve->n_outstanding++;
+
+ resolve->n_outstanding++;
+