On 21-08-13 10:48, Thomas Raschbacher wrote:
> Hi.
> 
> I just had a problem as well where dbmail-imapd died on me.
> Since It is just my server I did take a bit of time to create memory
> dumps and core files
> 
> strace showed me this (again and again so some loop):
> ...
> read(4, 0x1efbca0, 11)                  = -1 EAGAIN (Resource
> temporarily unavailable)
> write(13, "Q", 1)                       = -1 EAGAIN (Resource
> temporarily unavailable)
> ...
> 
> i checked what fd 13 was and it is some sort of pipe

Correct. DBMail uses a self-pipe to signal the main thread that there
are jobs on the queue.

http://cr.yp.to/docs/selfpipe.html


This mechanism is mainly used by worker threads to tell the main thread
they've finished with a workload.

It is also used by workers to send data to a client, through the main
thread. This is necessary because using libevent, basically we can't do
network IO from threads other than the main thread.

Finally it is used to re-schedule a call-back if there is pending data
for the client, but writing to the client generated a soft-failure.

It is I suspect in this last scenario that the loop occurs. I've tried
very hard to make it full proof, but I'll add some more guards to
prevent this from happening.




-- 
________________________________________________________________
Paul J Stevens        pjstevns @ gmail, twitter, skype, linkedin

  * Premium Hosting Services and Web Application Consultancy *

           www.nfg.nl/[email protected]/+31.85.877.99.97
________________________________________________________________
_______________________________________________
DBmail mailing list
[email protected]
http://mailman.fastxs.nl/cgi-bin/mailman/listinfo/dbmail

Reply via email to