Bug 98561

Summary: Crash in MetaBundle::genreList()
Product: [Applications] amarok Reporter: Sean Laurent <sean>
Component: generalAssignee: Amarok Developers <amarok-bugs-dist>
Status: RESOLVED WORKSFORME    
Severity: crash CC: wheeler
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Mandrake RPMs   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Sean Laurent 2005-02-04 17:44:28 UTC
Version:           1.2 beta 4 (using KDE KDE 3.2.1)
Installed from:    Mandrake RPMs
Compiler:          gcc 3.3.2 
OS:                Linux

I built amarok 1.2 beta 4 from source on Mandrake 10.0 official.  If I attempt to View/Edit Meta Information for any file, amarok 1.2 beta 4 crashes.  This may be related to 92551, but I can't easily upgrade to KDE 3.3 to verify.

System:
Mandrake 10.0 official
gcc 3.4.2 
taglib 1.3.1 (release 1.101mdk)

Stdout/stderr shows the following immediately before the crash:

[setting tty state failed in terminal_inferior: Input/output error]

Here's the full backtrace from gdb:

#0  0x41796aa1 in TagLib::String::String(TagLib::String const&) ()
   from /usr/lib/libtag.so.1
#1  0x080f59ef in std::list<TagLib::String, std::allocator<TagLib::String> >::_M_create_node(TagLib::String const&) ()
#2  0x080f599a in std::list<TagLib::String, std::allocator<TagLib::String> >::insert(std::_List_iterator<TagLib::String, TagLib::String&, TagLib::String*>, TagLib::String const&)          ()
#3  0x080f5927 in void std::list<TagLib::String, std::allocator<TagLib::String> >::_M_insert_dispatch<std::_List_iterato r<TagLib::String, TagLib::String const&, TagLib::String const*> >(std::_List_iterator<TagLib::String, TagLib::String&, TagLib::String*>, std::_List_iterator<TagLib::String, TagLib::String const&, TagLib::String const*>, std::_List_iterator<TagLib::String, TagLib::String const&, TagLib::String const*>, __false_type) ()
#4  0x080f5896 in void std::list<TagLib::String, std::allocator<TagLib::String> >::insert<std::_List_iterator<TagLib: :String, TagLib::String const&, TagLib::String const*> >(std::_List_iterator<TagLib::String, TagLib::String&, TagLib::String*>, std::_List_iterator<TagLib::String, TagLib::String const&, TagLib::String const*>, std::_List_iterator<TagLib::String, TagLib::String const&, TagLib::String const*>) ()
#5  0x080f57af in std::list<TagLib::String, std::allocator<TagLib::String> >::list(std::list<TagLib::String, std::allocator<TagLib::String> > const&) ()
#6  0x080f56be in TagLib::List<TagLib::String>::detach() ()
#7  0x080f5604 in TagLib::List<TagLib::String>::begin() ()
#8  0x080f537f in MetaBundle::genreList() ()
#9  0x081510f4 in TagDialog::init() ()
#10 0x081509cd in TagDialog::TagDialog(KURL const&, QWidget*) ()
#11 0x080976b5 in CollectionView::showTrackInfo() ()
#12 0x08098cbf in CollectionView::qt_invoke(int, QUObject*) ()
#13 0x410db4a2 in QObject::activate_signal(QConnectionList*, QUObject*) ()
   from /usr/lib/qt3/lib/libqt-mt.so.3
#14 0x40ef575e in ?? () from /usr/lib/qt3/lib/libqt-mt.so.3
#15 0x02eb50e6 in ?? ()
#16 0x40e80914 in ?? () from /usr/lib/qt3/lib/libqt-mt.so.3
#17 0x083f7400 in ?? ()
#18 0xbfffdb38 in ?? ()
#19 0xbfffdb24 in ?? ()
#20 0x08470090 in ?? ()
#21 0x4106edbc in QUType_QVariant::set(QUObject*, QVariant const&) ()
   from /usr/lib/qt3/lib/libqt-mt.so.3
#22 0x084ae3d8 in ?? ()
#23 0x0848c150 in ?? ()
#24 0x00000008 in ?? ()
#25 0x41523998 in ?? () from /usr/lib/qt3/lib/libqt-mt.so.3
#26 0xbfffdb38 in ?? ()
#27 0x0848c128 in ?? ()
#28 0x08470090 in ?? ()
#29 0x413fdaa6 in QSignal::signal(QVariant const&) ()
   from /usr/lib/qt3/lib/libqt-mt.so.3
#30 0x0848c128 in ?? ()
#31 0x08470090 in ?? ()
#32 0xbfffdb10 in ?? ()
#33 0x413fd8dc in QSignal::staticMetaObject() () from /usr/lib/qt3/lib/libqt-mt.so.3
#34 0x41503cc0 in vtable for QGArray () from /usr/lib/qt3/lib/libqt-mt.so.3
Comment 1 Max Howell 2005-02-04 19:56:06 UTC
Scott, we've had a few of these now. Is it us or is it TagLib? Thanks.

QStringList
MetaBundle::genreList()    //static
{
    QStringList list;

    TagLib::StringList genres = TagLib::ID3v1::genreList();
    for( TagLib::StringList::ConstIterator it = genres.begin(), end = genres.end(); it != end; ++it )
        list += TStringToQString( (*it) );

    list.sort();

    return list;
}
Comment 2 Scott Wheeler 2005-02-04 22:00:08 UTC
Is this possibly being called by multiple threads simultaneously?
Comment 3 Max Howell 2005-02-05 11:57:17 UTC
We only make use of TagLib::ID3v1::genreList() in the GUI thread, and only in 2 places in amaroK. However, we write and read tags in other threads, so if TagLib uses this list internally it is possible something non-thread-safe is going on.
Comment 4 Scott Wheeler 2005-02-05 17:54:58 UTC
Nope, this list isn't used internally.  But I'm slow to call it a taglib bug as I use almost exactly the same code in JuK and haven't ever had a crash reported there -- and that code hasn't changed in years.

TagLib::StringList genres = TagLib::ID3v1::genreList();

for(TagLib::StringList::ConstIterator it = genres.begin(); it != genres.end(); ++it)
    genreHash.insert(TStringToQString((*it)));
Comment 5 Max Howell 2005-02-05 22:16:41 UTC
Hmmm, I'll keep this stuff in mind, maybe we'll figure it out. Cheers Scott.
Comment 6 TheLinuxFr 2005-02-09 20:25:30 UTC
GDB output:

(no debugging symbols found)
Using host libthread_db library "/lib/tls/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread -1244206752 (LWP 16331)]
[New Thread -1255515216 (LWP 16363)]
[Thread debugging using libthread_db enabled]
[New Thread -1244206752 (LWP 16331)]
[New Thread -1255515216 (LWP 16363)]
[Thread debugging using libthread_db enabled]
[New Thread -1244206752 (LWP 16331)]
[New Thread -1255515216 (LWP 16363)]
0xffffe410 in ?? ()
#0  0xffffe410 in ?? ()
#1  0x0000001a in ?? ()
#2  0x0827c6cc in ?? ()
#3  0x0827c548 in ?? ()
#4  0xb6524861 in select () from /lib/tls/libc.so.6
#5  0xb6da3846 in QEventLoop::processEvents ()
   from /usr/lib/qt3/lib/libqt-mt.so.3
#6  0xb72d2d3c in qt_wait_timer_max () from /usr/lib/qt3/lib/libqt-mt.so.3
#7  0x00000000 in ?? ()
#8  0xbffff370 in ?? ()
#9  0xbffff3d0 in ?? ()
#10 0xb64df3e6 in wcsncasecmp_l () from /lib/tls/libc.so.6


kdBacktrace():

Engine      arts-engine
Build date: Jan 31 2005
CC version: 3.4.3 (Mandrakelinux 10.2 3.4.3-3mdk)
KDElibs:    3.3.2
taglib-1.3.1-3mdk
Comment 7 Stefan Siegel 2005-02-23 22:22:45 UTC
Today I got a similar crash when trying to open the tag dialog.

Here is the backtrace:

#0  0x41830810 in TagLib::RefCounter::ref (this=0x0) at taglib.h:68
#1  0x4185b577 in String (this=0x82fb1b0, s=@0x8247cd0) at tstring.cpp:79
#2  0x0817d803 in TagLib::List<TagLib::String>::detach ()
#3  0x0817da68 in TagLib::List<TagLib::String>::begin ()
#4  0x0815d6c2 in MetaBundle::genreList ()
#5  0x0815d995 in TagDialog::init ()
#6  0x08162132 in TagDialog::TagDialog ()
...

I first got this crash with a non-debug amarokapp and a non-debug
taglib 1.3.1 compiled with gcc 3.3.3. When trying debug-builds of
amarokapp and taglib, it still crashed, but the stack was corrupted so
I had to use a non-debug amarokapp to get the above backtrace. While
crashing it several times i saw "this=0xff00" in frame #0 once
(instead of "this=0x0").

After that I recompiled taglib with a gcc mainline snapshot from
2005-02-18, and the tag dialog worked properly, the crashes were
completely gone.

Comment 8 Sean Laurent 2005-02-23 23:12:54 UTC
After reading Stefan's comment, I downloaded the latest version of taglib from CVS (2005-02-23).  After jumping through a number of hoops to remove the existing Taglib installation that Mandrake provided, I managed to install from CVS. This seems to fix the problem for me.
Comment 9 Stefan Siegel 2005-02-23 23:27:37 UTC
Very strange... I always used the released taglib 1.3.1 version, 
perhaps I didn't mention that clearly enough.

What I took from CVS was a gcc snapshot (i.e. a development version of 
the compiler that will become gcc 4.0.0). I had it installed for 
other reasons, but I thought I could just give it a try here.

Comment 10 Greg Meyer 2005-03-19 06:46:48 UTC
This could be a GCC error because you are using a taglib package built for Mandrake 10.1 on a 10.0 install.  You might want to try and rebuild taglib from source and then rebuild amarok again.  or there are taglib 1.3.1 packages for mdk 10.0 here  http://www.gkmweb.com/amarok/10.0/
Comment 11 Seb Ruiz 2005-04-27 14:28:17 UTC
is this crash still relevant? I have never experienced it.
Comment 12 Seb Ruiz 2005-07-03 10:17:05 UTC
Closing due to lack of feedback and WORKSFORME!