On Fri, Jun 15, 2012 at 10:55 PM, grarpamp <grarpamp@gmail.com> wrote:
While happily processing these:
received block ...
SetBestChain: new best=...  height=...  work=...
ProcessBlock: ACCEPTED

bitcoind very often refuses to answer rpc queries such as getinfo/stop,
or signals such as kill/ctrl-c. It even registers:
 ThreadRPCServer method=getinfo/stop
in the debug log. But the action doesn't happen as expected.

Shouldn't it be checking and processing all user interrupts like
once per block and doing the chain in the background?


This has nothing to do with priority and "user interrupts", but with the locks on the wallet and client. Every RPC command takes both locks, and releases them only when finished.

Shutting down also requires both locks, so the operations will be serialized.

This protects the database and critical data structures. Sure, there might be some cases in which the locks are not necessary, or read/write locks could be used instead to improve concurrency, but this has to be approached really carefully.

Wladimir