[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: assertion failure in ber_free_buf() of io.c (ITS#2655)



maxchern@yahoo.com wrote:
>
> Try disable referrals in slapd.conf (comment them out)
> and see whether you run into this problem again.
> The problem is that you got an invalid ber, referral
> freeing is one of the place that invalid ber will
> occur.

Thanks for the response.

No referrals were enabled in slapd.conf when the crash
occurred.  The only clue that I can add is that load on
slapd had grown high enough to cause an increase in the
thread pool from the starting 4 entries to 8.  That
suggests that a new connection might have tried to use a
ninth thread and exposed a bug in thread pool management.
(That's only my guess.)

Vic Abell

--- abe@purdue.edu wrote:
> Full_Name: Victor A. Abell
> Version: 2.1.21
> OS: Solaris 8
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (128.210.177.112)
> 
> 
> OpenLDAP 2.1.21 has crashed once in the four days
> since it was put into
> production.  The crash occurred at an assert() at
> line 161 of the
> ber_free_buf() function of the
> libraries/liblber/io.c translation unit.
> 
> The core file stack trace says:
> 
> Current function is ber_free_buf
>   161           assert( LBER_VALID( ber ) );
> (dbx 1) where
> current thread: t@13
>   [1] __sigprocmask(0x0, 0xfa001540, 0x0, 0x0, 0x0,
> 0x0), at 0xfef29ab8
>   [2] _resetsig(0xfef2c340, 0x0, 0x0, 0xfa001d78,
> 0xfef3e000, 0x0), at
> 0xfef1e50
> c
>   [3] _sigon(0xfa001d78, 0xfef45980, 0x6,
> 0xfa001614, 0xfa001d78, 0xfef9155d),
> a
> t 0xfef1dcac
>   [4] _thrp_kill(0x0, 0xd, 0x6, 0xfef3e000, 0xd,
> 0xff03c4a0), at 0xfef20cc0
>   [5] raise(0x6, 0x0, 0x0, 0xffffffff, 0x1e6550,
> 0x0), at 0xfefcb190
>   [6] abort(0xff03801c, 0xfa001768, 0x39,
> 0x7efefeff, 0x81010100, 0xff00), at
> 0x
> fefb57bc
>   [7] _assert(0x1af5c8, 0x1af5dc, 0xa1, 0x1af5dc,
> 0x0, 0x1d3e48), at 0xfefb5a60
> =>[8] ber_free_buf(ber = 0x2a23d0), line 161 in
> "io.c"
>   [9] ber_free(ber = 0x2a23d0, freebuf = 1), line
> 187 in "io.c"
>   [10] slap_op_free(op = 0x2a30b8), line 48 in
> "operation.c"
>   [11] connection_operation(ctx = 0x2ac520, arg_v =
> 0x2a30b8), line 1060 in
> "con
> nection.c"
>   [12] ldap_int_thread_pool_wrapper(xpool =
> 0x1eb408), line 426 in "tpool.c"
> 
> The ber pointer used by ber_free_buf() derefences
> to:
> 
> *ber = {
>     ber_opts    = {
>         lbo_valid    = 49
>         lbo_options  = 5136U
>         lbo_debug    = 0;
>         lbo_meminuse = 2497312
>     }
>     ber_tag     = 119U
>     ber_len     = 2848856U
>     ber_usertag = 0
>     ber_buf     = 0x2f8300 ""
>     ber_ptr     = 0x2fd4bc ""
>     ber_end     = 0x2fd4bc ""
>     ber_sos     = (nil)
>     ber_rwptr   = 0x2a23c8 ""
> }
> 
> The ber_valid (ber->ber_opts.lbo_valid) value, 49,
> is clearly invalid.
> 
> I have discovered a similar issuereport, but in a
> different io.c function,
> in Incoming/2633.  It, too, applies to OpenDLAP
> 2.1.21 on Solaris 8.
> 
> Any suggestions on further core analysis, available
> patches, etc., would
> be most welcome.
> 
> Vic Abell