Hi Mark,

Thanks for your reply.

After attaching to imapd with tusc (system call tracer) it appears that child (slave) process dies with SIGBUS.

Further troubleshooting led me to line 979 of src/osdep/unix.c.

if (!tstream->rdonly) ((UNIXLOCAL *) tstream->local)->dirty = T;

Slave process seems to die when it hits this line.

Any idea why this happens?

Regards,

Ermin

Mark Crispin wrote:
On Fri, 10 Nov 2006, Ermin Borovac wrote:
The current command did not succeed. The mail server responded: Execution process terminated abnormally (a).

This is not good. This indicates that the slave process created to do the operation exited due to signal 0xa which is ECHILD on most systems. Put another way, the master process did a waitpid() on the slave, and got 0xa back in the status. The expected value is 0x400; the slave process returns an exit code of 1 if all is well.

I don't have a clue as to how/why this happened; nor why other SVR4 sites have not reported it (at least, not yet).

What's bizarre is that the master/slave protocol negotiation on the pipe was successful; and apparently the message was copied successfully. The only thing that seems to have failed was the slave passing back its exit status (0 if failure, 1 if success) back to the master, and the master reaping the slave.

This is in the code to work around fcntl() locking which SVR4 systems (such as Solaris, HP-UX, and AIX) force you to use since they don't have (true) flock(). fcntl() locking releases a lock whenever any file designator open on the file is closed, regardless of whether the lock was applied on a designator that is still opened.

If you want to try debugging, see if you can get a protocol transcript from Thunderbird so you can see what it is doing. Try to repeat the same in a manual run of imapd. The idea is to see if you can reliably reproduce the problem.

Note that if you run imapd from the shell, you can do IMAP protocol commands without having to authenticate (you'll be preauthenticated as yourself). The routines in question are master() in flocksim.c which does the entire master/slave interaction, and grim_pid_reap_status() in gr_waitp.c which does the waitpid() call.

Alternatively, you can give up on SVR4 and switch to a Linux or BSD system for your IMAP service. Such a system would be less expensive than your HP-UX system, and would not have any of this flocksim nonsense. The flocksim code is specific to the SVR4 port.

-- Mark --

http://panda.com/mrc
Democracy is two wolves and a sheep deciding what to eat for lunch.
Liberty is a well-armed sheep contesting the vote.
_______________________________________________
Imap-uw mailing list
[email protected]
https://mailman1.u.washington.edu/mailman/listinfo/imap-uw

Reply via email to