Problems with pread() in 2.2.2 for HP-UX 11.00

Jeremy Allison jra at samba.org
Tue Oct 16 21:50:15 GMT 2001


On Tue, Oct 16, 2001 at 11:40:54PM -0500, samba-technical at thewrittenword.com wrote:
> I'm getting a core dump in smbd under 2.2.2 with the following simple
> smb.conf under HP-UX 11.00 (hppa1.1-hp-hpux11.00):
> [global]
>   use mmap = false
> 
> [homes]
>   comment = Home Directories
>   browseable = yes
>   path = /home/%u
> 
> $ smbd -D -d 5
> $ gdb smbd core
> (gdb) bt
> #0  0xc01160e8 in pread () from /usr/lib/libc.2
> #1  0x18c1ec in tdb_read (tdb=0x400aaf30, off=172, buf=0x7b03087c "", len=4, 
>     cv=0) at tdb/tdb.c:311
> #2  0x18c3d0 in ofs_read (tdb=0x400aaf30, offset=172, d=0x7b03087c)
>     at tdb/tdb.c:345
> #3  0x18e018 in tdb_next_lock (tdb=0x400aaf30, tlock=0x7b030878, 
>     rec=0x7b030860) at tdb/tdb.c:1106
> #4  0x18e220 in tdb_traverse (tdb=0x400aaf30, fn=0x4007887a <count_fn>, 
>     state=0x7b0307c0 "") at tdb/tdb.c:1169
> #5  0x140f0 in claim_connection (conn=0x0, name=0x40001b20 "", 
>     max_connections=100000, Clear=1) at smbd/connection.c:144
> #6  0xf67c in main (argc=6, argv=0x7b030368) at smbd/server.c:757
> 
> HP-UX 11.00 has pread in libc (/usr/lib/libc.sl). Does it work? I
> tried the following simple program:
> #include <stdio.h>
> #include <unistd.h>
> #include <fcntl.h>
> 
> int
> main (void) {
>   int fd;
>   char buf[256];
> 
>   fd = open ("/etc/passwd", O_RDONLY);
>   printf ("fd: %d\n", fd);
> 
>   printf ("bytes: %ld\n", pread (fd, buf, 20, 0));
>   printf ("%s\n", buf);
> 
>   close (fd);
> }
> 
> $ cc a.c
> $ ./a.out
> fd: 3
> Bad system call(coredump)
> 
> HP-UX 11.00 doesn't even have a man page for pread. So, I hopped on
> over to the IRTC support page. There I found patch PHKL_22589 and
> noted the following in the description:
>   PHKL_20349:
>   ( SR: 8606110852 CR: JAGab83602 )
>   Enhancement to add new pread(2), pwrite(2), pread64(2) and
>   pwrite64(2) system calls.  These calls perform the same
>   action as read(2) and write(2) except that they read/write
>   from a given position in the file (specified in the fourth
>   argument) without changing the file pointer.
> 
> So, I loaded PHKL_22589 and now pread works. So, it's not good enough
> to test if pread is available. We must test if it works.

Hmmmm. But pread is supposed to be a standard system call.

We can't check to see if *every* system calls works, or we'd be spending
time supporting checking the basics on every platform....

What does everyone else think ? Are pread/pwrite exotic enough
so that we have to test basic functionality ? Or should we just
assume that if they're shipped with a system the should bloody
well work (you can tell I favour the latter can't you :-) :-).

Jeremy.




More information about the samba-technical mailing list