Issue 6426 - back-ndb: slapd crash with 'Bus error'
Summary: back-ndb: slapd crash with 'Bus error'
Status: VERIFIED SUSPENDED
Alias: None
Product: OpenLDAP
Classification: Unclassified
Component: backends (show other issues)
Version: 2.4.19
Hardware: All All
: --- normal
Target Milestone: ---
Assignee: OpenLDAP project
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-12-09 12:56 UTC by a.afzali2003@gmail.com
Modified: 2020-06-25 23:26 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description a.afzali2003@gmail.com 2009-12-09 12:56:53 UTC
Full_Name: afshin afzali
Version: 2.4.19
OS: CentOS 5 - 64Bit
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (94.182.20.153)


I use "Apache Directory Studio" to manage my directory service. Randomly I used
an invalid attribute ( cn ) to create an country object. 

Regards,
-- afshin


>>> slap_listener(ldap:///)
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 42 contents:
op tag 0x60, time 1260363040
ber_get_next
conn=0 op=0 do_bind
ber_scanf fmt ({imt) ber:
ber_scanf fmt (m}) ber:
>>> dnPrettyNormal: <cn=root,dc=callee,dc=ir>
=> ldap_bv2dn(cn=root,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=root,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=root,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=root,dc=callee,dc=ir)=0 
<<< dnPrettyNormal: <cn=root,dc=callee,dc=ir>, <cn=root,dc=callee,dc=ir>
do_bind: version=3 dn="cn=root,dc=callee,dc=ir" method=128
==> ndb_back_bind: dn: cn=root,dc=callee,dc=ir
do_bind: v3 bind: "cn=root,dc=callee,dc=ir" to "cn=root,dc=callee,dc=ir"
send_ldap_result: conn=0 op=0 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=1 tag=97 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 56 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=1 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <>
<<< dnPrettyNormal: <>, <>
SRCH "" 0 3    0 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: subschemaSubentry
=> send_search_entry: conn 0 dn=""
ber_flush2: 68 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=1 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=2 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 96 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=2 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <cn=Subschema>
=> ldap_bv2dn(cn=Subschema,0)
<= ldap_bv2dn(cn=Subschema)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=Subschema)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=subschema)=0 
<<< dnPrettyNormal: <cn=Subschema>, <cn=subschema>
SRCH "cn=Subschema" 0 3    0 0 0
ber_scanf fmt ({mm}) ber:
    filter: (objectClass=subschema)
ber_scanf fmt ({M}}) ber:
    attrs: createTimestamp modifyTimestamp
=> send_search_entry: conn 0 dn="cn=Subschema"
ber_flush2: 127 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=2 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=3 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 174 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=3 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <cn=Subschema>
=> ldap_bv2dn(cn=Subschema,0)
<= ldap_bv2dn(cn=Subschema)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=Subschema)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=subschema)=0 
<<< dnPrettyNormal: <cn=Subschema>, <cn=subschema>
SRCH "cn=Subschema" 0 3    0 0 0
ber_scanf fmt ({mm}) ber:
    filter: (objectClass=subschema)
ber_scanf fmt ({M}}) ber:
    attrs: objectClasses attributeTypes ldapSyntaxes matchingRules
matchingRuleUse createTimestamp modifyTimestamp
=> send_search_entry: conn 0 dn="cn=Subschema"
ber_flush2: 71646 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=3 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=4 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 221 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=4 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <>
<<< dnPrettyNormal: <>, <>
SRCH "" 0 0    0 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: namingContexts subschemaSubentry supportedLDAPVersion
supportedSASLMechanisms supportedExtension supportedControl supportedFeatures
vendorName vendorVersion + objectClass
=> send_search_entry: conn 0 dn=""
ber_flush2: 797 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=4 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=5 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 40 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=5 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <>
<<< dnPrettyNormal: <>, <>
SRCH "" 0 0    0 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: *
=> send_search_entry: conn 0 dn=""
ber_flush2: 70 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=5 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=6 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 79 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=6 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <cn=Subschema>
=> ldap_bv2dn(cn=Subschema,0)
<= ldap_bv2dn(cn=Subschema)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=Subschema)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=subschema)=0 
<<< dnPrettyNormal: <cn=Subschema>, <cn=subschema>
SRCH "cn=Subschema" 0 3    1 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: hasSubordinates objectClass
=> send_search_entry: conn 0 dn="cn=Subschema"
ber_flush2: 104 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=6 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=7 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 76 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=7 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <cn=config>
=> ldap_bv2dn(cn=config,0)
<= ldap_bv2dn(cn=config)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=config)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=config)=0 
<<< dnPrettyNormal: <cn=config>, <cn=config>
SRCH "cn=config" 0 3    1 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: hasSubordinates objectClass
==> limits_get: conn=0 op=7 self="cn=root,dc=callee,dc=ir" this="cn=config"
send_ldap_result: conn=0 op=7 p=3
send_ldap_result: err=32 matched="" text=""
send_ldap_response: msgid=8 tag=101 err=32
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 82 contents:
op tag 0x63, time 1260363040
ber_get_next
conn=0 op=8 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <dc=callee,dc=ir>
=> ldap_bv2dn(dc=callee,dc=ir,0)
<= ldap_bv2dn(dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(dc=callee,dc=ir)=0 
<<< dnPrettyNormal: <dc=callee,dc=ir>, <dc=callee,dc=ir>
SRCH "dc=callee,dc=ir" 0 3    1 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: hasSubordinates objectClass
>>> dnNormalize: <cn=root,dc=callee,dc=ir>
=> ldap_bv2dn(cn=root,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=root,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=root,dc=callee,dc=ir)=0 
<<< dnNormalize: <cn=root,dc=callee,dc=ir>
>>> dnNormalize: <cn=root,dc=callee,dc=ir>
=> ldap_bv2dn(cn=root,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=root,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=root,dc=callee,dc=ir)=0 
<<< dnNormalize: <cn=root,dc=callee,dc=ir>
=> send_search_entry: conn 0 dn="dc=callee,dc=ir"
ber_flush2: 122 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=8 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=9 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 55 contents:
op tag 0x63, time 1260363055
ber_get_next
conn=0 op=9 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <dc=callee,dc=ir>
=> ldap_bv2dn(dc=callee,dc=ir,0)
<= ldap_bv2dn(dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(dc=callee,dc=ir)=0 
<<< dnPrettyNormal: <dc=callee,dc=ir>, <dc=callee,dc=ir>
SRCH "dc=callee,dc=ir" 0 3    0 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: *
>>> dnNormalize: <cn=root,dc=callee,dc=ir>
=> ldap_bv2dn(cn=root,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=root,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=root,dc=callee,dc=ir)=0 
<<< dnNormalize: <cn=root,dc=callee,dc=ir>
>>> dnNormalize: <cn=root,dc=callee,dc=ir>
=> ldap_bv2dn(cn=root,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=root,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=root,dc=callee,dc=ir)=0 
<<< dnNormalize: <cn=root,dc=callee,dc=ir>
=> send_search_entry: conn 0 dn="dc=callee,dc=ir"
ber_flush2: 138 bytes to sd 13
<= send_search_entry: conn 0 exit.
send_ldap_result: conn=0 op=9 p=3
send_ldap_result: err=0 matched="" text=""
send_ldap_response: msgid=10 tag=101 err=0
ber_flush2: 22 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 95 contents:
op tag 0x63, time 1260363086
ber_get_next
conn=0 op=10 do_search
ber_scanf fmt ({miiiib) ber:
>>> dnPrettyNormal: <cn=myCountry,dc=callee,dc=ir>
=> ldap_bv2dn(cn=myCountry,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=myCountry,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=myCountry,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=mycountry,dc=callee,dc=ir)=0 
<<< dnPrettyNormal: <cn=myCountry,dc=callee,dc=ir>,
<cn=mycountry,dc=callee,dc=ir>
SRCH "cn=myCountry,dc=callee,dc=ir" 0 0    1 0 0
ber_scanf fmt (m) ber:
    filter: (objectClass=*)
ber_scanf fmt ({M}}) ber:
    attrs: hasSubordinates objectClass
send_ldap_result: conn=0 op=10 p=3
send_ldap_result: err=32 matched="dc=callee,dc=ir" text=""
send_ldap_response: msgid=11 tag=101 err=32
ber_flush2: 37 bytes to sd 13
connection_get(13)
connection_get(13): got connid=0
connection_read(13): checking for input on id=0
ber_get_next
ber_get_next: tag 0x30 len 87 contents:
op tag 0x68, time 1260363100
ber_get_next
conn=0 op=11 do_add
ber_scanf fmt ({m) ber:
conn=0 op=11 do_add: dn (cn=myCountry,dc=callee,dc=ir)
ber_scanf fmt ({m{W}}) ber:
ber_scanf fmt ({m{W}}) ber:
ber_scanf fmt (}) ber:
>>> dnPrettyNormal: <cn=myCountry,dc=callee,dc=ir>
=> ldap_bv2dn(cn=myCountry,dc=callee,dc=ir,0)
<= ldap_bv2dn(cn=myCountry,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=myCountry,dc=callee,dc=ir)=0 
=> ldap_dn2bv(272)
<= ldap_dn2bv(cn=mycountry,dc=callee,dc=ir)=0 
<<< dnPrettyNormal: <cn=myCountry,dc=callee,dc=ir>,
<cn=mycountry,dc=callee,dc=ir>
==> ndb_back_add: cn=myCountry,dc=callee,dc=ir
oc_check_required entry (cn=myCountry,dc=callee,dc=ir), objectClass "country"
Entry (cn=myCountry,dc=callee,dc=ir): object class 'country' requires attribute
'c'
ndb_back_add: entry failed schema check: object class 'country' requires
attribute 'c' (65)
send_ldap_result: conn=0 op=11 p=3
send_ldap_result: err=65 matched="" text="object class 'country' requires
attribute 'c'"
send_ldap_response: msgid=12 tag=105 err=65
ber_flush2: 67 bytes to sd 13
Bus error
[root@dc1 openldap]# 

Comment 1 Quanah Gibson-Mount 2009-12-09 22:54:51 UTC
--On Wednesday, December 09, 2009 12:56 PM +0000 a.afzali2003@gmail.com 
wrote:

> Full_Name: afshin afzali
> Version: 2.4.19
> OS: CentOS 5 - 64Bit
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (94.182.20.153)

> Bus error
> [root@dc1 openldap]#

Please provide a GDB backtrace of the crash with full debugging symbols.

Thanks


--Quanah



--

Quanah Gibson-Mount
Principal Software Engineer
Zimbra, Inc
--------------------
Zimbra ::  the leader in open source messaging and collaboration

Comment 2 Quanah Gibson-Mount 2009-12-10 16:22:34 UTC
--On Thursday, December 10, 2009 1:02 PM +0330 afshin afzali 
<a.afzali2003@gmail.com> wrote:

> Hi Quanah
>
> I did reconfigure with --enable-debug, but just could get this:

To build with debugging symbols, you need to use a CFLAGS value of -g, like:

CFLAGS="-g" ./configure <whatever options you use>
make depend
make

make install DESTDIR=/my/path/to/install STRIP=""


The STRIP="" ensures none of the debugging symbols inserted by gcc get 
stripped out.

--Quanah


--

Quanah Gibson-Mount
Principal Software Engineer
Zimbra, Inc
--------------------
Zimbra ::  the leader in open source messaging and collaboration

Comment 3 Quanah Gibson-Mount 2009-12-12 17:47:51 UTC
--On Saturday, December 12, 2009 1:16 PM +0330 afshin afzali 
<a.afzali2003@gmail.com> wrote:

> Hi,
> It is makes no difference except that the 'Bus error' replaced with
> 'Segmentation fault'. Also I've used the 'make clean' to cleanup my
> installation. Any suggestion ?
>
> Regards,
>  
>
>
> [root@dc1 libexec]# gdb --core=core.12305
> GNU gdb Fedora (6.8-37.el5)
> Copyright (C) 2008 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show
> copying"
> and "show warranty" for details.
> This GDB was configured as "x86_64-redhat-linux-gnu".
> Core was generated by `./slapd -d5'.
> Program terminated with signal 11, Segmentation fault.
> [New process 12313]
> [New process 12314]
> [New process 12312]
> [New process 12311]
> [New process 12310]
> [New process 12309]
> [New process 12308]
> [New process 12307]
> [New process 12305]
># 0  0x000000000066f891 in ?? ()
> (gdb)

So where's the thr apply all bt command inside gdb?  You've just loaded the 
core, you haven't asked for any information.

Also, keep replies to the bug tracker (i.e., CC it as well) if you want 
help.

--Quanah


--

Quanah Gibson-Mount
Principal Software Engineer
Zimbra, Inc
--------------------
Zimbra ::  the leader in open source messaging and collaboration

Comment 4 Quanah Gibson-Mount 2009-12-15 00:31:10 UTC
--On Saturday, December 12, 2009 5:48 PM +0000 quanah@zimbra.com wrote:


>># 0=C2=A0 0x000000000066f891 in ?? ()
>> (gdb)
>
> So where's the thr apply all bt command inside gdb?  You've just loaded

Please provide the backtrace as noted if you want this to be further 
investigated.  Thanks!

Again, after you run:

gdb </slapd> <core>

You then need to run:

thr apply all bt

To get a backtrace of all threads, and then submit that to the ITS.

--Quanah


--

Quanah Gibson-Mount
Principal Software Engineer
Zimbra, Inc
--------------------
Zimbra ::  the leader in open source messaging and collaboration

Comment 5 Quanah Gibson-Mount 2009-12-15 08:28:59 UTC
Afshin,

Copy openldap-its@openldap.org on all you replies so they go into the bug 
tracker, so that others can see them.

--Quanah

--On Tuesday, December 15, 2009 10:39 AM +0330 afshin afzali 
<a.afzali2003@gmail.com> wrote:

> Hi Quanah,
>
> Appreciate your help. Hope this be helpful.
> -- afshin
>
>
> [root@dc1 libexec]# gdb ./slapd core.12305
> GNU gdb Fedora (6.8-37.el5)
> Copyright (C) 2008 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show
> copying"
> and "show warranty" for details.
> This GDB was configured as "x86_64-redhat-linux-gnu"...
> Reading symbols from /lib64/libuuid.so.1...done.
> Loaded symbols for /lib64/libuuid.so.1
> Reading symbols from /lib64/librt.so.1...done.
> Loaded symbols for /lib64/librt.so.1
> Reading symbols from /lib64/libcrypt.so.1...done.
> Loaded symbols for /lib64/libcrypt.so.1
> Reading symbols from /lib64/libnsl.so.1...done.
> Loaded symbols for /lib64/libnsl.so.1
> Reading symbols from /lib64/libm.so.6...done.
> Loaded symbols for /lib64/libm.so.6
> Reading symbols from /lib64/libpthread.so.0...done.
> Loaded symbols for /lib64/libpthread.so.0
> Reading symbols from /usr/lib64/libstdc++.so.6...done.
> Loaded symbols for /usr/lib64/libstdc++.so.6
> Reading symbols from /usr/lib64/libsasl2.so.2...done.
> Loaded symbols for /usr/lib64/libsasl2.so.2
> Reading symbols from /lib64/libssl.so.6...done.
> Loaded symbols for /lib64/libssl.so.6
> Reading symbols from /lib64/libcrypto.so.6...done.
> Loaded symbols for /lib64/libcrypto.so.6
> Reading symbols from /lib64/libresolv.so.2...done.
> Loaded symbols for /lib64/libresolv.so.2
> Reading symbols from /lib64/libgcc_s.so.1...done.
> Loaded symbols for /lib64/libgcc_s.so.1
> Reading symbols from /lib64/libc.so.6...done.
> Loaded symbols for /lib64/libc.so.6
> Reading symbols from /lib64/ld-linux-x86-64.so.2...done.
> Loaded symbols for /lib64/ld-linux-x86-64.so.2
> Reading symbols from /lib64/libdl.so.2...done.
> Loaded symbols for /lib64/libdl.so.2
> Reading symbols from /usr/lib64/libgssapi_krb5.so.2...done.
> Loaded symbols for /usr/lib64/libgssapi_krb5.so.2
> Reading symbols from /usr/lib64/libkrb5.so.3...done.
> Loaded symbols for /usr/lib64/libkrb5.so.3
> Reading symbols from /lib64/libcom_err.so.2...done.
> Loaded symbols for /lib64/libcom_err.so.2
> Reading symbols from /usr/lib64/libk5crypto.so.3...done.
> Loaded symbols for /usr/lib64/libk5crypto.so.3
> Reading symbols from /usr/lib64/libz.so.1...done.
> Loaded symbols for /usr/lib64/libz.so.1
> Reading symbols from /usr/lib64/libkrb5support.so.0...done.
> Loaded symbols for /usr/lib64/libkrb5support.so.0
> Reading symbols from /lib64/libkeyutils.so.1...done.
> Loaded symbols for /lib64/libkeyutils.so.1
> Reading symbols from /lib64/libselinux.so.1...done.
> Loaded symbols for /lib64/libselinux.so.1
> Reading symbols from /lib64/libsepol.so.1...done.
> Loaded symbols for /lib64/libsepol.so.1
> Reading symbols from /lib64/libnss_files.so.2...done.
> Loaded symbols for /lib64/libnss_files.so.2
> Reading symbols from /usr/lib64/sasl2/libanonymous.so.2...done.
> Loaded symbols for /usr/lib64/sasl2/libanonymous.so.2
> Reading symbols from /usr/lib64/sasl2/libsasldb.so.2...done.
> Loaded symbols for /usr/lib64/sasl2/libsasldb.so.2
> Reading symbols from /usr/lib64/sasl2/liblogin.so.2...done.
> Loaded symbols for /usr/lib64/sasl2/liblogin.so.2
> Reading symbols from /usr/lib64/sasl2/libplain.so.2...done.
> Loaded symbols for /usr/lib64/sasl2/libplain.so.2
> Core was generated by `./slapd -d5'.
> Program terminated with signal 11, Segmentation fault.
> [New process 12313]
> [New process 12314]
> [New process 12312]
> [New process 12311]
> [New process 12310]
> [New process 12309]
> [New process 12308]
> [New process 12307]
> [New process 12305]
># 0  NdbTransaction::execute (this=0x15,
># aTypeOfExec=NdbTransaction::Rollback,
>     abortOption=NdbOperation::DefaultAbortOption, forceSend=0)
>     at NdbTransaction.cpp:278
> 278     NdbTransaction.cpp: No such file or directory.
>         in NdbTransaction.cpp
> (gdb) thr apply all bt
>
> Thread 9 (process 12305):
># 0  0x000000370e8077e5 in pthread_join () from /lib64/libpthread.so.0
># 1  0x000000000059affb in ldap_pvt_thread_join (thread=1107417408,
>     thread_return=0x0) at thr_posix.c:197
># 2  0x00000000004ba2a8 in slapd_daemon () at daemon.c:2835
># 3  0x000000000049bfad in main (argc=2, argv=0x7fff78fd91e8) at
># main.c:950
> Current language:  auto; currently c++
>
> Thread 8 (process 12307):
># 0  0x000000370e0cced2 in select () from /lib64/libc.so.6
># 1  0x000000000068a73b in my_sleep (m_seconds=<value optimized out>)
>     at my_sleep.c:34
># 2  0x00000000006b3ff0 in TransporterFacade::threadMainReceive
># (this=0xc7a6530)
>     at ../../../../storage/ndb/include/portlib/NdbSleep.h:31
># 3  0x00000000006b4049 in runReceiveResponse_C (me=0x0)
>     at TransporterFacade.cpp:564
># 4  0x00000000006a35de in ndb_thread_wrapper (_ss=0xc581620) at
># NdbThread.c:147 5  0x000000370e8064a7 in start_thread () from
># /lib64/libpthread.so.0 6  0x000000370e0d3c2d in clone () from
># /lib64/libc.so.6
>
> Thread 7 (process 12308):
># 0  0x000000370e0cced2 in select () from /lib64/libc.so.6
># 1  0x000000000068a73b in my_sleep (m_seconds=<value optimized out>)
> ---Type <return> to continue, or q <return> to quit---
>     at my_sleep.c:34
># 2  0x00000000006b2d0f in TransporterFacade::threadMainSend
># (this=0xc7a6530)
>     at ../../../../storage/ndb/include/portlib/NdbSleep.h:31
># 3  0x00000000006b2d89 in runSendRequest_C (me=0x0)
>     at TransporterFacade.cpp:529
># 4  0x00000000006a35de in ndb_thread_wrapper (_ss=0xc588670) at
># NdbThread.c:147 5  0x000000370e8064a7 in start_thread () from
># /lib64/libpthread.so.0 6  0x000000370e0d3c2d in clone () from
># /lib64/libc.so.6
>
> Thread 6 (process 12309):
># 0  0x000000370e0cced2 in select () from /lib64/libc.so.6
># 1  0x000000000068a73b in my_sleep (m_seconds=<value optimized out>)
>     at my_sleep.c:34
># 2  0x00000000006b9740 in ClusterMgr::threadMain (this=0xc7b8ce0)
>     at ../../../../storage/ndb/include/portlib/NdbSleep.h:31
># 3  0x00000000006b98d9 in runClusterMgr_C (me=0x0) at ClusterMgr.cpp:50
># 4  0x00000000006a35de in ndb_thread_wrapper (_ss=0xc5888b0) at
># NdbThread.c:147 5  0x000000370e8064a7 in start_thread () from
># /lib64/libpthread.so.0 6  0x000000370e0d3c2d in clone () from
># /lib64/libc.so.6
>
> Thread 5 (process 12310):
># 0  0x000000370e0cced2 in select () from /lib64/libc.so.6
># 1  0x000000000068a73b in my_sleep (m_seconds=<value optimized out>)
> ---Type <return> to continue, or q <return> to quit---
>     at my_sleep.c:34
># 2  0x00000000006c8738 in TransporterRegistry::start_clients_thread (
>     this=0xc580c70) at
> ../../../../../storage/ndb/include/portlib/NdbSleep.h:31
># 3  0x00000000006c89e9 in run_start_clients_C (me=0x0)
>     at TransporterRegistry.cpp:1422
># 4  0x00000000006a35de in ndb_thread_wrapper (_ss=0xc588a40) at
># NdbThread.c:147 5  0x000000370e8064a7 in start_thread () from
># /lib64/libpthread.so.0 6  0x000000370e0d3c2d in clone () from
># /lib64/libc.so.6
>
> Thread 4 (process 12311):
># 0  0x000000370e0cced2 in select () from /lib64/libc.so.6
># 1  0x00000000006a82d6 in SocketServer::doAccept (this=0xc7b8bd0)
>     at SocketServer.cpp:189
># 2  0x00000000006a8612 in SocketServer::doRun (this=0xc7b8bd0)
>     at SocketServer.cpp:279
># 3  0x00000000006a8639 in socketServerThread_C (_ss=0x1)
>     at SocketServer.cpp:231
># 4  0x00000000006a35de in ndb_thread_wrapper (_ss=0xc581710) at
># NdbThread.c:147 5  0x000000370e8064a7 in start_thread () from
># /lib64/libpthread.so.0 6  0x000000370e0d3c2d in clone () from
># /lib64/libc.so.6
>
> Thread 3 (process 12312):
># 0  0x000000370e0d4018 in epoll_wait () from /lib64/libc.so.6
> ---Type <return> to continue, or q <return> to quit---
># 1  0x00000000004b9559 in slapd_daemon_task (ptr=0x0) at daemon.c:2460
># 2  0x000000370e8064a7 in start_thread () from /lib64/libpthread.so.0
># 3  0x000000370e0d3c2d in clone () from /lib64/libc.so.6
>
> Thread 2 (process 12314):
># 0  0x000000370e80ab99 in pthread_cond_wait@@GLIBC_2.3.2 ()
>    from /lib64/libpthread.so.0
># 1  0x000000000059b0a3 in ldap_pvt_thread_cond_wait (cond=0xc538bc0,
>     mutex=0xc538b98) at thr_posix.c:277
># 2  0x0000000000599b63 in ldap_int_thread_pool_wrapper (xpool=0xc538b90)
>     at tpool.c:672
># 3  0x000000370e8064a7 in start_thread () from /lib64/libpthread.so.0
># 4  0x000000370e0d3c2d in clone () from /lib64/libc.so.6
>
> Thread 1 (process 12313):
># 0  NdbTransaction::execute (this=0x15,
># aTypeOfExec=NdbTransaction::Rollback,
>     abortOption=NdbOperation::DefaultAbortOption, forceSend=0)
>     at NdbTransaction.cpp:278
># 1  0x0000000000561195 in NdbTransaction::execute (this=0x15,
>     execType=Rollback, abortOption=DefaultAbortOption, force=0)
>     at /usr/include/mysql/storage/ndb/ndbapi/NdbTransaction.hpp:343
># 2  0x0000000000575926 in ndb_back_add (op=0xc58c5d0, rs=0x4283ec00)
>     at add.cpp:336
> ---Type <return> to continue, or q <return> to quit---
># 3  0x00000000004c6489 in fe_op_add (op=0xc58c5d0, rs=0x4283ec00) at
># add.c:334 4  0x00000000004c5e13 in do_add (op=0xc58c5d0, rs=0x4283ec00)
># at add.c:194 5  0x00000000004bd06a in connection_operation
># (ctx=0x4283ed50,
>     arg_v=0xc58c5d0) at connection.c:1123
># 6  0x00000000004bd5ef in connection_read_thread (ctx=0x4283ed50,
># argv=0xd)
>     at connection.c:1259
># 7  0x0000000000599c01 in ldap_int_thread_pool_wrapper (xpool=0xc538b90)
>     at tpool.c:685
># 8  0x000000370e8064a7 in start_thread () from /lib64/libpthread.so.0
># 9  0x000000370e0d3c2d in clone () from /lib64/libc.so.6
> (gdb)
>
>
>
>
> On Tue, Dec 15, 2009 at 4:01 AM, Quanah Gibson-Mount <quanah@zimbra.com>
> wrote:
>
> --On Saturday, December 12, 2009 5:48 PM +0000 quanah@zimbra.com wrote:
>
>
>
>
># 0=C2=A0 0x000000000066f891 in ?? ()
> (gdb)
>
>
>
> So where's the thr apply all bt command inside gdb?  You've just loaded
>
>
> Please provide the backtrace as noted if you want this to be further
> investigated.  Thanks!
>
> Again, after you run:
>
> gdb </slapd> <core>
>
> You then need to run:
>
> thr apply all bt
>
> To get a backtrace of all threads, and then submit that to the ITS.
>
>
>
>
> --Quanah
>
>
> --
>
> Quanah Gibson-Mount
> Principal Software Engineer
> Zimbra, Inc
> --------------------
> Zimbra ::  the leader in open source messaging and collaboration
>
>



--

Quanah Gibson-Mount
Principal Software Engineer
Zimbra, Inc
--------------------
Zimbra ::  the leader in open source messaging and collaboration

Comment 6 a.afzali2003@gmail.com 2009-12-15 08:38:19 UTC
Regards,
-- afshin

On Dec 15, 2009 11:58am, Quanah Gibson-Mount <quanah@zimbra.com> wrote:
> Afshin,



> Copy openldap-its@openldap.org on all you replies so they go into the bug  
> tracker, so that others can see them.



> --Quanah



> --On Tuesday, December 15, 2009 10:39 AM +0330 afshin afzali  
> a.afzali2003@gmail.com> wrote:




> Hi Quanah,



> Appreciate your help. Hope this be helpful.

> -- afshin





> [root@dc1 libexec]# gdb ./slapd core.12305

> GNU gdb Fedora (6.8-37.el5)

> Copyright (C) 2008 Free Software Foundation, Inc.

> License GPLv3+: GNU GPL version 3 or later

> http://gnu.org/licenses/gpl.html>

> This is free software: you are free to change and redistribute it.

> There is NO WARRANTY, to the extent permitted by law. Type "show

> copying"

> and "show warranty" for details.

> This GDB was configured as "x86_64-redhat-linux-gnu"...

> Reading symbols from /lib64/libuuid.so.1...done.

> Loaded symbols for /lib64/libuuid.so.1

> Reading symbols from /lib64/librt.so.1...done.

> Loaded symbols for /lib64/librt.so.1

> Reading symbols from /lib64/libcrypt.so.1...done.

> Loaded symbols for /lib64/libcrypt.so.1

> Reading symbols from /lib64/libnsl.so.1...done.

> Loaded symbols for /lib64/libnsl.so.1

> Reading symbols from /lib64/libm.so.6...done.

> Loaded symbols for /lib64/libm.so.6

> Reading symbols from /lib64/libpthread.so.0...done.

> Loaded symbols for /lib64/libpthread.so.0

> Reading symbols from /usr/lib64/libstdc++.so.6...done.

> Loaded symbols for /usr/lib64/libstdc++.so.6

> Reading symbols from /usr/lib64/libsasl2.so.2...done.

> Loaded symbols for /usr/lib64/libsasl2.so.2

> Reading symbols from /lib64/libssl.so.6...done.

> Loaded symbols for /lib64/libssl.so.6

> Reading symbols from /lib64/libcrypto.so.6...done.

> Loaded symbols for /lib64/libcrypto.so.6

> Reading symbols from /lib64/libresolv.so.2...done.

> Loaded symbols for /lib64/libresolv.so.2

> Reading symbols from /lib64/libgcc_s.so.1...done.

> Loaded symbols for /lib64/libgcc_s.so.1

> Reading symbols from /lib64/libc.so.6...done.

> Loaded symbols for /lib64/libc.so.6

> Reading symbols from /lib64/ld-linux-x86-64.so.2...done.

> Loaded symbols for /lib64/ld-linux-x86-64.so.2

> Reading symbols from /lib64/libdl.so.2...done.

> Loaded symbols for /lib64/libdl.so.2

> Reading symbols from /usr/lib64/libgssapi_krb5.so.2...done.

> Loaded symbols for /usr/lib64/libgssapi_krb5.so.2

> Reading symbols from /usr/lib64/libkrb5.so.3...done.

> Loaded symbols for /usr/lib64/libkrb5.so.3

> Reading symbols from /lib64/libcom_err.so.2...done.

> Loaded symbols for /lib64/libcom_err.so.2

> Reading symbols from /usr/lib64/libk5crypto.so.3...done.

> Loaded symbols for /usr/lib64/libk5crypto.so.3

> Reading symbols from /usr/lib64/libz.so.1...done.

> Loaded symbols for /usr/lib64/libz.so.1

> Reading symbols from /usr/lib64/libkrb5support.so.0...done.

> Loaded symbols for /usr/lib64/libkrb5support.so.0

> Reading symbols from /lib64/libkeyutils.so.1...done.

> Loaded symbols for /lib64/libkeyutils.so.1

> Reading symbols from /lib64/libselinux.so.1...done.

> Loaded symbols for /lib64/libselinux.so.1

> Reading symbols from /lib64/libsepol.so.1...done.

> Loaded symbols for /lib64/libsepol.so.1

> Reading symbols from /lib64/libnss_files.so.2...done.

> Loaded symbols for /lib64/libnss_files.so.2

> Reading symbols from /usr/lib64/sasl2/libanonymous.so.2...done.

> Loaded symbols for /usr/lib64/sasl2/libanonymous.so.2

> Reading symbols from /usr/lib64/sasl2/libsasldb.so.2...done.

> Loaded symbols for /usr/lib64/sasl2/libsasldb.so.2

> Reading symbols from /usr/lib64/sasl2/liblogin.so.2...done.

> Loaded symbols for /usr/lib64/sasl2/liblogin.so.2

> Reading symbols from /usr/lib64/sasl2/libplain.so.2...done.

> Loaded symbols for /usr/lib64/sasl2/libplain.so.2

> Core was generated by `./slapd -d5'.

> Program terminated with signal 11, Segmentation fault.

> [New process 12313]

> [New process 12314]

> [New process 12312]

> [New process 12311]

> [New process 12310]

> [New process 12309]

> [New process 12308]

> [New process 12307]

> [New process 12305]

> # 0 NdbTransaction::execute (this=0x15,

> # aTypeOfExec=NdbTransaction::Rollback,

> abortOption=NdbOperation::DefaultAbortOption, forceSend=0)

> at NdbTransaction.cpp:278

> 278 NdbTransaction.cpp: No such file or directory.

> in NdbTransaction.cpp

> (gdb) thr apply all bt



> Thread 9 (process 12305):

> # 0 0x000000370e8077e5 in pthread_join () from /lib64/libpthread.so.0

> # 1 0x000000000059affb in ldap_pvt_thread_join (thread=1107417408,

> thread_return=0x0) at thr_posix.c:197

> # 2 0x00000000004ba2a8 in slapd_daemon () at daemon.c:2835

> # 3 0x000000000049bfad in main (argc=2, argv=0x7fff78fd91e8) at

> # main.c:950

> Current language: auto; currently c++



> Thread 8 (process 12307):

> # 0 0x000000370e0cced2 in select () from /lib64/libc.so.6

> # 1 0x000000000068a73b in my_sleep (m_seconds=)

> at my_sleep.c:34

> # 2 0x00000000006b3ff0 in TransporterFacade::threadMainReceive

> # (this=0xc7a6530)

> at ../../../../storage/ndb/include/portlib/NdbSleep.h:31

> # 3 0x00000000006b4049 in runReceiveResponse_C (me=0x0)

> at TransporterFacade.cpp:564

> # 4 0x00000000006a35de in ndb_thread_wrapper (_ss=0xc581620) at

> # NdbThread.c:147 5 0x000000370e8064a7 in start_thread () from

> # /lib64/libpthread.so.0 6 0x000000370e0d3c2d in clone () from

> # /lib64/libc.so.6



> Thread 7 (process 12308):

> # 0 0x000000370e0cced2 in select () from /lib64/libc.so.6

> # 1 0x000000000068a73b in my_sleep (m_seconds=)

> ---Type to continue, or q to quit---

> at my_sleep.c:34

> # 2 0x00000000006b2d0f in TransporterFacade::threadMainSend

> # (this=0xc7a6530)

> at ../../../../storage/ndb/include/portlib/NdbSleep.h:31

> # 3 0x00000000006b2d89 in runSendRequest_C (me=0x0)

> at TransporterFacade.cpp:529

> # 4 0x00000000006a35de in ndb_thread_wrapper (_ss=0xc588670) at

> # NdbThread.c:147 5 0x000000370e8064a7 in start_thread () from

> # /lib64/libpthread.so.0 6 0x000000370e0d3c2d in clone () from

> # /lib64/libc.so.6



> Thread 6 (process 12309):

> # 0 0x000000370e0cced2 in select () from /lib64/libc.so.6

> # 1 0x000000000068a73b in my_sleep (m_seconds=)

> at my_sleep.c:34

> # 2 0x00000000006b9740 in ClusterMgr::threadMain (this=0xc7b8ce0)

> at ../../../../storage/ndb/include/portlib/NdbSleep.h:31

> # 3 0x00000000006b98d9 in runClusterMgr_C (me=0x0) at ClusterMgr.cpp:50

> # 4 0x00000000006a35de in ndb_thread_wrapper (_ss=0xc5888b0) at

> # NdbThread.c:147 5 0x000000370e8064a7 in start_thread () from

> # /lib64/libpthread.so.0 6 0x000000370e0d3c2d in clone () from

> # /lib64/libc.so.6



> Thread 5 (process 12310):

> # 0 0x000000370e0cced2 in select () from /lib64/libc.so.6

> # 1 0x000000000068a73b in my_sleep (m_seconds=)

> ---Type to continue, or q to quit---

> at my_sleep.c:34

> # 2 0x00000000006c8738 in TransporterRegistry::start_clients_thread (

> this=0xc580c70) at

> ../../../../../storage/ndb/include/portlib/NdbSleep.h:31

> # 3 0x00000000006c89e9 in run_start_clients_C (me=0x0)

> at TransporterRegistry.cpp:1422

> # 4 0x00000000006a35de in ndb_thread_wrapper (_ss=0xc588a40) at

> # NdbThread.c:147 5 0x000000370e8064a7 in start_thread () from

> # /lib64/libpthread.so.0 6 0x000000370e0d3c2d in clone () from

> # /lib64/libc.so.6



> Thread 4 (process 12311):

> # 0 0x000000370e0cced2 in select () from /lib64/libc.so.6

> # 1 0x00000000006a82d6 in SocketServer::doAccept (this=0xc7b8bd0)

> at SocketServer.cpp:189

> # 2 0x00000000006a8612 in SocketServer::doRun (this=0xc7b8bd0)

> at SocketServer.cpp:279

> # 3 0x00000000006a8639 in socketServerThread_C (_ss=0x1)

> at SocketServer.cpp:231

> # 4 0x00000000006a35de in ndb_thread_wrapper (_ss=0xc581710) at

> # NdbThread.c:147 5 0x000000370e8064a7 in start_thread () from

> # /lib64/libpthread.so.0 6 0x000000370e0d3c2d in clone () from

> # /lib64/libc.so.6



> Thread 3 (process 12312):

> # 0 0x000000370e0d4018 in epoll_wait () from /lib64/libc.so.6

> ---Type to continue, or q to quit---

> # 1 0x00000000004b9559 in slapd_daemon_task (ptr=0x0) at daemon.c:2460

> # 2 0x000000370e8064a7 in start_thread () from /lib64/libpthread.so.0

> # 3 0x000000370e0d3c2d in clone () from /lib64/libc.so.6



> Thread 2 (process 12314):

> # 0 0x000000370e80ab99 in pthread_cond_wait@@GLIBC_2.3.2 ()

> from /lib64/libpthread.so.0

> # 1 0x000000000059b0a3 in ldap_pvt_thread_cond_wait (cond=0xc538bc0,

> mutex=0xc538b98) at thr_posix.c:277

> # 2 0x0000000000599b63 in ldap_int_thread_pool_wrapper (xpool=0xc538b90)

> at tpool.c:672

> # 3 0x000000370e8064a7 in start_thread () from /lib64/libpthread.so.0

> # 4 0x000000370e0d3c2d in clone () from /lib64/libc.so.6



> Thread 1 (process 12313):

> # 0 NdbTransaction::execute (this=0x15,

> # aTypeOfExec=NdbTransaction::Rollback,

> abortOption=NdbOperation::DefaultAbortOption, forceSend=0)

> at NdbTransaction.cpp:278

> # 1 0x0000000000561195 in NdbTransaction::execute (this=0x15,

> execType=Rollback, abortOption=DefaultAbortOption, force=0)

> at /usr/include/mysql/storage/ndb/ndbapi/NdbTransaction.hpp:343

> # 2 0x0000000000575926 in ndb_back_add (op=0xc58c5d0, rs=0x4283ec00)

> at add.cpp:336

> ---Type to continue, or q to quit---

> # 3 0x00000000004c6489 in fe_op_add (op=0xc58c5d0, rs=0x4283ec00) at

> # add.c:334 4 0x00000000004c5e13 in do_add (op=0xc58c5d0, rs=0x4283ec00)

> # at add.c:194 5 0x00000000004bd06a in connection_operation

> # (ctx=0x4283ed50,

> arg_v=0xc58c5d0) at connection.c:1123

> # 6 0x00000000004bd5ef in connection_read_thread (ctx=0x4283ed50,

> # argv=0xd)

> at connection.c:1259

> # 7 0x0000000000599c01 in ldap_int_thread_pool_wrapper (xpool=0xc538b90)

> at tpool.c:685

> # 8 0x000000370e8064a7 in start_thread () from /lib64/libpthread.so.0

> # 9 0x000000370e0d3c2d in clone () from /lib64/libc.so.6

> (gdb)









> On Tue, Dec 15, 2009 at 4:01 AM, Quanah Gibson-Mount quanah@zimbra.com>

> wrote:



> --On Saturday, December 12, 2009 5:48 PM +0000 quanah@zimbra.com wrote:









> # 0=C2=A0 0x000000000066f891 in ?? ()

> (gdb)







> So where's the thr apply all bt command inside gdb? You've just loaded





> Please provide the backtrace as noted if you want this to be further

> investigated. Thanks!



> Again, after you run:



> gdb



> You then need to run:



> thr apply all bt



> To get a backtrace of all threads, and then submit that to the ITS.









> --Quanah





> --



> Quanah Gibson-Mount

> Principal Software Engineer

> Zimbra, Inc

> --------------------

> Zimbra :: the leader in open source messaging and collaboration












> --



> Quanah Gibson-Mount

> Principal Software Engineer

> Zimbra, Inc

> --------------------

> Zimbra :: the leader in open source messaging and collaboration

Comment 7 Quanah Gibson-Mount 2017-03-28 00:00:12 UTC
moved from Incoming to Software Bugs
Comment 8 Quanah Gibson-Mount 2020-03-19 19:30:52 UTC
back-ndb was never completed, experimental only
Comment 9 Quanah Gibson-Mount 2020-06-25 23:26:03 UTC
patches welcome