Fwd: busywaiting without blocking event loop OR timers

hello everyone,

[this is a crosspost from nginx-devel, which seems awful quiet these
days …]

i’m working on a module that uses ngx_event_connect to connect to a
3rdparty service and parses its request.
the answer depends on the request hostname, so now i’m implementing a
cache in shared memory to cache the responses on a hostname basis.

i’m protecting access to every cache entry using a ngx_atomic_t.

now i’d like to prevent multiple concurrent connections from requests
to the same hostname to the 3rd party service.

i see two ways to solve that:

  • busy-wait on ngx_atomic_t as long as a request to the service is open
  • create an event and wait for it

now, how can i busy-wait on a ngx_atomic_t without blocking the
handling of other requests in the same process?
(these requests can last up to 10 seconds in worst-case)
→ can i yield to the event loop while busy-waiting?

can i create events independent of I/O, like timer events?

thanks in advance

our howto on doing what we’re doing in our module: