octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #59228] embedded.cc example crashes with segfa


From: Rik
Subject: [Octave-bug-tracker] [bug #59228] embedded.cc example crashes with segfault
Date: Wed, 7 Oct 2020 12:03:31 -0400 (EDT)
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

Update of bug #59228 (project octave):

                Category:                    None => Interpreter            
                  Status:                    None => Confirmed              
        Operating System:                  Mac OS => Any                    

    _______________________________________________________

Follow-up Comment #3:

Confirmed on a Linux platform as well.  Changing the Operating System to
"Any".

I ran under gdb and the backtrace is:


#0  0x0000000000000000 in ?? ()
#1  0x00007ffff712f40f in octave::cdef_object_rep::release(octave::cdef_object
const&) () from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#2  0x00007ffff718ca68 in octave_classdef_meta::~octave_classdef_meta() ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#3  0x00007ffff7874bca in
std::_Sp_counted_ptr<octave::fcn_info::fcn_info_rep*,
(__gnu_cxx::_Lock_policy)2>::_M_dispose() ()
   from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#4  0x00007ffff76b652a in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#5  0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#6  0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#7  0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#8  0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#9  0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#10 0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#11 0x00007ffff76b6495 in std::_Rb_tree<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const, octave::fcn_info>,
std::_Select1st<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >,
std::less<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >
>::_M_erase(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, octave::fcn_info> >*) ()
from /home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#12 0x00007ffff76b3d29 in octave::interpreter::~interpreter() () from
/home/rik/local/lib/octave/6.0.91/liboctinterp.so.8
#13 0x0000555555555a40 in main ()


It starts in the destructor for the interpreter (#12) and then ends up in the
destructor for octave_classdef_meta.  I also verified that adding
interpreter.shutdown () resolves this issue.

We can certainly make that change to the example code to demonstrate best
practice.  Still, I think it is a decision for jwe as to whether an object
going out of existence, in this case the interpreter, should be able to cause
a segfault.



    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?59228>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]