>> The real problem could be if the process that was signaled to connect to the message queue never handles the interrupt, and we keep waiting forever in shm_mq_receive(). We could add a timeout parameter or just let the user cancel the call: send a cancellation request, use pg_cancel_backend() or set statement_timeout before running this. > > This is valid question - for begin we can use a statement_timeout and we don't need to design some special (if you don't hold some important lock). > My example (the code has prototype quality) is little bit longer, but it work without global lock - the requester doesn't block any other
I'll update the commitfest patch to use this technique.
Please find attached v4.
It is better
Two notices:
1. The communication mechanism can be used more wide, than only for this purpose. We can introduce a SendInfoHook - and it can be used for any customer probes - memory, cpu, ...
2. With your support for explain of nested queries we have all what we need for integration auto_explain to core.