Hi Phil,
On Wed, 19 Mar 2003, Philip Hazel wrote:
> On Tue, 18 Mar 2003, Adrian Bool wrote:
>
> > Can't ignore signal CHLD, forcing to default.
>
> Which operating system? Exim sets SIGCHLD to SIG_IGN in plenty of
> places, and nobody has ever reported a complaint of that kind before.
> Ignoring SIGCHLD is the standard thing to do when you want to spin off
> a new process and not have anything more do do with it.
Mandrake Linux 9.0. I did manage to stop the problem late last night by
inserting a signal(SIGCHLD, SIG_DFL) in exim-4.14, receive.c:2421,
/* child_signal = signal(SIGCHLD, SIG_DFL); */ /* AID */
DEBUG(D_receive) debug_printf("calling local_scan(); timeout=%d\n",
local_scan_timeout);
local_scan_data = NULL;
if (local_scan_timeout > 0)
{
os_non_restarting_signal(SIGALRM, local_scan_timeout_handler);
alarm(local_scan_timeout);
}
rc = local_scan(data_fd, &local_scan_data);
alarm(0);
store_pool = POOL_MAIN; /* In case changed */
DEBUG(D_receive) debug_printf("local_scan() returned %d %s\n", rc,
local_scan_data);
/* os_non_restarting_signal(SIGSEGV, child_signal); */ /* AID */
(the /* AID */ lines!)
I've remarked them out for now and am reworking my code to use your
child_open and child_close functions - which already seem to have SIGCHLD
covered. Is that a bit dodgy though as they are not part of the
'local_scan' API?
I will hopefully know if that works without either SIG probelms or
alterting exim's code at all in a short while...
Regards,
aid
--
Adrian Bool | http://noc.vianw.net/
Director, Global Core Network | tel://+44.1925.484061/
VIA NET.WORKS Inc. | noc://+49.203.3093.1111/