Hi Fog,
RPC callbacks are executed in the epoll thread[1]. Calling synctask_yield causes that epoll thread to be blocked until, the corresponding "wake" is called. Most likely, the code calling the "wake" is tied to a network-event, which wouldn't be 'noticed' until the epoll thread is unblocked. This is a classic deadlock. You could attach gdb to the hung process and check if synctask_yield was called on the epoll thread. For further analysis, you might want to paste the output of "thread apply all bt full" from gdb, attached to the hung process. [1] - epoll thread - is a short name for the thread executing epoll (), 'listening' for network events. HTH, krish On 04/26/2013 03:10 PM, fog - wrote:
|