On Monday 30 July 2007 22:35, Martin Simmons wrote:
> >>>>> On Mon, 30 Jul 2007 19:27:43 +0200, Kern Sibbald said:
> > 
> > On Monday 30 July 2007 19:16, Martin Simmons wrote:
> > > >>>>> On Mon, 30 Jul 2007 16:48:09 +0200, Kern Sibbald said:
> > > > 
> > > > On Sunday 29 July 2007 19:28, Ryan Novosielski wrote:
> > > > > Hi all,
> > > > > 
> > > > > Ever since I added the TapeAlert/smartmonctl command to my tape 
drive,
> > > > > it appears as if I get a fairly regular crash of that bacula-sd. I 
know
> > > > > there is a case where Bacula and the utility can go for the tape 
drive
> > > > > at the same time and cause problems, but I don't think Bacula should 
go
> > > > > KABOOM when this happens.
> > > > 
> > > > The traceback, unfortunately, doesn't demangle the C++ subroutine 
names 
> > nor 
> > > > provide source line numbers, but the best that I can tell is that the 
heap 
> > > > has been corrupted, Bacula detects is, then does a Kaboom (self 
inflicted 
> > seg 
> > > > fault).
> > > 
> > > I think there is a bug in bnet_thread_server that causes the Kaboom.
> > > 
> > > The dlist sockfds contains the fd_ptr objects, which are allocated with
> > > alloca.  The problem is that the dlist destructor will deallocate them 
using
> > > free (i.e. sm_free).  You can see this in the backtrace, where the 
argument 
> > to
> > > sm_free is a pointer into the stack (0xffbff028).
> > 
> > Oh, that is cute and clever of you to figure out.  I'll *certainly* take a 
> > look at it.
> > 
> > I've never seen such a crash so it must only normally happen on shutdown. 
Do 
> > you have any idea what is triggering the code that fails in this case?
> 
> Right, I can't see any normal way for the main loop of bnet_thread_server to
> exit in the SD.
> 
> Something I've wondered occasionally though: is it guaranteed that the use 
of
> errno in code like this will give the error generated by select?
> 
>       if ((stat = select(maxfd + 1, &sockset, NULL, NULL, NULL)) < 0) {
>          berrno be;                   /* capture errno */
>          if (errno == EINTR)...
> 
> I.e. could the berrno constructor (poolmem, smartalloc etc) change errno?

Yes, that is certainly possible.  I've modified the berrno class to ensure 
that errno is unchanged during the constructor.  

Thanks.

> 
> __Martin
> 

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to