I've been banging my head against this bug for 4 days.
I can't think of how to ask for help except to give a birds eye view
of the situation.
I have a python daemon that is listening on a UNIX socket for
communication with exim, my Mail Transfer Agent.
Each mail message has its own exim process.
The exim process speaks to my daemon, who starts a thread which reads
everything there is on the socket, and sends and 'OK' to send exim on
its way. That exim process finishes quickly because that 'OK' means
to dump the message, I am taking responsibility for it from here.
When stuff was read from the exim socket, it was stored in a tempfile,
so that I could release the exim process, then I lseek to the front of
the tempfile and have it handy. I see from all my debugging and
logging that the file descriptor for this tempfile is 9.
The program then opens a pipe to exim to send mail. I see that the
popen2.popen3 call returns 9 for the stdin file descriptor for the
The tempfile (also file descriptor 9) is read for piping into exim and
it errors with "Bad file descriptor".
Worse yet, the first 5 messages of my test go through the entire
process without a problem, and then # 6 hits this -- but only if # 1
message is really big.