Strange problem with errno and latest Sylpheed from pkgsrc

Steve O'Hara-Smith steve at sohara.org
Mon Feb 20 06:08:50 PST 2006


On Mon, 20 Feb 2006 14:19:24 +0100
joerg at xxxxxxxxxxxxxxxxx wrote:

> On Mon, Feb 20, 2006 at 12:07:34PM +0000, Steve O'Hara-Smith wrote:
> > 	I've hit a really odd problem with the latest pkgsrc sylpheed
> > under 1.5.0 Preview. Attempts to fetch mail from my POP3 servers always
> > fail instantly - using gdb I tracked the problem to this bit of code:
> 
> Can you please ktrace sylpheed?

	Certainly full ktrace.out is at ftp:ftp.sohara.org/pub/ktrace.out

	The relevant section of kdump -tc seems to be

 94265 sylpheed RET   socket 8
 94265 sylpheed CALL  fcntl(0x8,0x3,0)
 94265 sylpheed RET   fcntl 2
 94265 sylpheed CALL  fcntl(0x8,0x4,0x6)
 94265 sylpheed RET   fcntl 0
 94265 sylpheed CALL  fcntl(0x8,0x4,0x6)
 94265 sylpheed RET   fcntl 0
 94265 sylpheed CALL  fcntl(0x8,0x3,0)
 94265 sylpheed RET   fcntl 6
 94265 sylpheed CALL  connect(0x8,0x82fc120,0x10)
 94265 sylpheed RET   connect -1 errno 36 Operation now in progress
 94265 sylpheed CALL  writev(0x2,0xbfbfe4b0,0x4)
 94265 sylpheed RET   writev 35/0x23
 94265 sylpheed CALL  fstat(0x8,0xbfbfe500)
 94265 sylpheed RET   fstat 0
 94265 sylpheed CALL  close(0x8)
 94265 sylpheed RET   close 0

> Next time, please mention that you use sylpheed-devel :-)

	It's not sylpheed-devel 2.2.0 has been released and mail/sylpheed
has been updated to it yesterday :)

	I got another core dump from it anyway so for now I have
reverted to 2.0.4 and I have 2.2.0 built but not installed.

> > 	Which would seem to indicate that errno is , but
> > in gdb print errno produces - $1 1179403647 which is an absurd number.
> 
> Bug in gdb.

	Perhaps - but AFAICT that message should not have come out of
perror because the other branch should have been taken in the case that
errno == EINPROGRESS.

	I changed the code a little to check:

------------------------------------------------------------------------------
                if (connect(sock, addr_data->addr, addr_data->addr_len) < 0) {
fprintf (stderr, "Connect failed - errno = %d\n", errno);
                        if (EINPROGRESS == errno) {
                                break;
                        } else {
                                perror("connect");
                                fd_close(sock);
                        }
                } else
                        break;
        }
-------------------------------------------------------------------------------

	I got this result:

Connect failed - errno = 672793088
connect: Operation now in progress

	It really looks like perror() and the code are seeing different
errno variables :(

	Everything uses #include <errno> with no sign of extern int errno
hackery.

	This smells badly of thread problems to me.

-- 
C:>WIN                                      |   Directable Mirror Arrays
The computer obeys and wins.                | A better way to focus the sun
You lose and Bill collects.                 |    licences available see
                                            |    http://www.sohara.org/





More information about the Bugs mailing list