if clients send requests faster than workers can handle them, some of the requests are never dispatched to the worker, because s_dispatch() is only called from handle_ready() and handle_request().
What appears to be missing is a call to s_dispatch() at the end of handle_final() in mdp_broker.c
To reproduce, run attached broker, worker and client.
then create multiple requests (say, 5 requests) with the client before handling them in the worker.
Only the first one will be processed by the client.
then create a new request in the client and handle a request in the worker.
Now request number 2 will be handled, etc.
if clients send requests faster than workers can handle them, some of the requests are never dispatched to the worker, because s_dispatch() is only called from handle_ready() and handle_request(). What appears to be missing is a call to s_dispatch() at the end of handle_final() in mdp_broker.c
To reproduce, run attached broker, worker and client. then create multiple requests (say, 5 requests) with the client before handling them in the worker. Only the first one will be processed by the client. then create a new request in the client and handle a request in the worker. Now request number 2 will be handled, etc.
mdp_broker_issue_demo.tar.gz
so IMHO, handle_final() should look like this (added a call to s_dispatch() after re-adding a worker as waiting):
cheers,
Joerg