Solaris fcntl CPU/Lock update

jra at dp.samba.org jra at dp.samba.org
Tue Feb 4 18:56:20 GMT 2003


On Mon, Feb 03, 2003 at 07:38:31AM -0800, Jeff Mandel wrote:
> Here's gdb with bt from two processes 12279 and 12327
> 
> root at reiger# gdb /usr/local/samba/bin/smbd 12279
> GNU gdb 5.0
> Copyright 2000 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain 
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "sparc-sun-solaris2.8"...
> "/tmp/12279" is not a core dump: File truncated
> Attaching to program `/usr/local/samba/bin/smbd', process 12279
> Reading symbols from /usr/lib/libsec.so.1...done.
> Loaded symbols for /usr/lib/libsec.so.1
> Reading symbols from /usr/lib/libgen.so.1...done.
> Loaded symbols for /usr/lib/libgen.so.1
> Reading symbols from /usr/lib/libsocket.so.1...done.
> Loaded symbols for /usr/lib/libsocket.so.1
> Reading symbols from /usr/lib/libnsl.so.1...done.
> Loaded symbols for /usr/lib/libnsl.so.1
> Reading symbols from /usr/lib/libdl.so.1...done.
> Loaded symbols for /usr/lib/libdl.so.1
> Reading symbols from /usr/lib/libpopt.so.0...done.
> Loaded symbols for /usr/lib/libpopt.so.0
> Reading symbols from /usr/lib/libc.so.1...done.
> Loaded symbols for /usr/lib/libc.so.1
> Reading symbols from /usr/lib/libmp.so.2...done.
> Loaded symbols for /usr/lib/libmp.so.2
> Reading symbols from 
> /usr/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1...done.
> Loaded symbols for /usr/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
> Reading symbols from /usr/lib/nss_files.so.1...done.
> Loaded symbols for /usr/lib/nss_files.so.1
> Reading symbols from /usr/lib/nss_ldap.so.1...done.
> Loaded symbols for /usr/lib/nss_ldap.so.1
> Reading symbols from /usr/lib/libpthread.so.1...done.
> Loaded symbols for /usr/lib/libpthread.so.1
> Reading symbols from /usr/local/ldapsdk5/lib/libldap50.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libldap50.so
> Reading symbols from /usr/local/ldapsdk5/lib/libssldap50.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libssldap50.so
> Reading symbols from /usr/local/ldapsdk5/lib/libssl3.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libssl3.so
> ---Type <return> to continue, or q <return> to quit---
> Reading symbols from /usr/local/ldapsdk5/lib/libnss3.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libnss3.so
> Reading symbols from /usr/local/ldapsdk5/lib/libnspr4.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libnspr4.so
> Reading symbols from /usr/local/ldapsdk5/lib/libprldap50.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libprldap50.so
> Reading symbols from /usr/local/ldapsdk5/lib/libplc4.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libplc4.so
> Reading symbols from /usr/local/ldapsdk5/lib/libplds4.so...done.
> Loaded symbols for /usr/local/ldapsdk5/lib/libplds4.so
> Reading symbols from /usr/lib/libdb-3.3.so...done.
> Loaded symbols for /usr/lib/libdb-3.3.so
> Reading symbols from /usr/lib/libresolv.so.2...done.
> Loaded symbols for /usr/lib/libresolv.so.2
> Reading symbols from /usr/lib/libthread.so.1...done.
> Loaded symbols for /usr/lib/libthread.so.1
> Reading symbols from /usr/lib/librt.so.1...done.
> Loaded symbols for /usr/lib/librt.so.1
> Reading symbols from /usr/lib/libaio.so.1...done.
> Loaded symbols for /usr/lib/libaio.so.1
> sol-thread active.
> Retry #1:
> Retry #2:
> Retry #3:
> Retry #4:
> [New LWP    1        ]
> [New Thread 1 (LWP 1)]
> Symbols already loaded for /usr/lib/libsec.so.1
> Symbols already loaded for /usr/lib/libgen.so.1
> Symbols already loaded for /usr/lib/libsocket.so.1
> Symbols already loaded for /usr/lib/libnsl.so.1
> Symbols already loaded for /usr/lib/libdl.so.1
> Symbols already loaded for /usr/lib/libpopt.so.0
> Symbols already loaded for /usr/lib/libc.so.1
> Symbols already loaded for /usr/lib/libmp.so.2
> Symbols already loaded for 
> /usr/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
> Symbols already loaded for /usr/lib/nss_files.so.1
> Symbols already loaded for /usr/lib/nss_ldap.so.1
> Symbols already loaded for /usr/lib/libpthread.so.1
> Symbols already loaded for /usr/local/ldapsdk5/lib/libldap50.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libssldap50.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libssl3.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libnss3.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libnspr4.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libprldap50.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libplc4.so
> Symbols already loaded for /usr/local/ldapsdk5/lib/libplds4.so
> Symbols already loaded for /usr/lib/libdb-3.3.so
> Symbols already loaded for /usr/lib/libresolv.so.2
> Symbols already loaded for /usr/lib/libthread.so.1
> Symbols already loaded for /usr/lib/librt.so.1
> Symbols already loaded for /usr/lib/libaio.so.1
> [Switching to Thread 1 (LWP 1)]
> <signal handler called>
> (gdb) bt
> #0  <signal handler called>
> #1  0xfecd9794 in __sigprocmask () from /usr/lib/libthread.so.1
> #2  0xfecce148 in _sigon () from /usr/lib/libthread.so.1
> #3  0xfecd05bc in thr_sigsetmask () from /usr/lib/libthread.so.1
> #4  <signal handler called>
> #5  0x65646974 in ?? ()
> #6  0xfecdb1f0 in usleep () from /usr/lib/libthread.so.1
> #7  0xf7d1c in do_lock_spin (fsp=0x27d450, conn=0x26e760, lock_pid=0, 
> count=1,
>     offset=2147483538, lock_type=WRITE_LOCK) at locking/locking.c:175
> #8  0x58bb4 in reply_lockingX (conn=0x26e760, inbuf=0x2173c9 "",
>     outbuf=0x237819 "", length=75, bufsize=16644) at smbd/reply.c:4714
> #9  0x739bc in switch_message (type=36, inbuf=0x2173c9 "", 
> outbuf=0x237819 "",
>     size=75, bufsize=16644) at smbd/process.c:774
> #10 0x73a48 in construct_reply (inbuf=0x2173c9 "", outbuf=0x237819 "",
>     size=75, bufsize=16644) at smbd/process.c:803
> #11 0x73cf4 in process_smb (inbuf=0x2173c9 "", outbuf=0x237819 "")
>     at smbd/process.c:897
> #12 0x74814 in smbd_process () at smbd/process.c:1294
> #13 0x314b4 in main (argc=0, argv=0xffbefeac) at smbd/server.c:832
> (gdb) The program is running.  Quit anyway (and detach it)? (y or n) y
> 
> trace from 12327:
> (gdb) bt
> #0  0xfecd9794 in __sigprocmask () from /usr/lib/libthread.so.1
> #1  0xfecce1e8 in _deliversigs () from /usr/lib/libthread.so.1
> #2  0xfecd05c4 in thr_sigsetmask () from /usr/lib/libthread.so.1
> #3  <signal handler called>
> #4  0xb in ?? ()
> #5  0xfecdb1f0 in usleep () from /usr/lib/libthread.so.1
> #6  0xf7d1c in do_lock_spin (fsp=0x26da48, conn=0x257c68, lock_pid=0,
>     count=20, offset=2147483559, lock_type=WRITE_LOCK) at 
> locking/locking.c:175
> #7  0x58bb4 in reply_lockingX (conn=0x257c68, inbuf=0x2173c9 "",
>     outbuf=0x237819 "", length=75, bufsize=16644) at smbd/reply.c:4714
> #8  0x739bc in switch_message (type=36, inbuf=0x2173c9 "", 
> outbuf=0x237819 "",
>     size=75, bufsize=16644) at smbd/process.c:774
> #9  0x73a48 in construct_reply (inbuf=0x2173c9 "", outbuf=0x237819 "",
>     size=75, bufsize=16644) at smbd/process.c:803
> #10 0x73cf4 in process_smb (inbuf=0x2173c9 "", outbuf=0x237819 "")
>     at smbd/process.c:897
> #11 0x74814 in smbd_process () at smbd/process.c:1294
> #12 0x314b4 in main (argc=0, argv=0xffbefeac) at smbd/server.c:832
> (gdb) The program is running.  Quit anyway (and detach it)? (y or n) y

This is a much more interesting backtrace than the
other. Why is smbd linking in pthread libraries ?
smbd is *NOT* a threaded program.

The backtrace you have here shows smbd trying to get
a fcntl lock on behalf of a client and failing to get it
instantaneously, so going into the lock spin code. It
will try 3 times, sleeping for 10 usec between each attempt,
and then return a fail to the client. This is not in itself
a spinning bug or problem, smbd is meant to do this.

I'm worried about the interaction between the Solaris lwp
libc code and smbd.... smbd should be a simple program
with only one thread of execution.

Jeremy.



More information about the samba-technical mailing list