Bug 321329 - Crash when disabling script (Collections::ServiceCollection::albumById)
Summary: Crash when disabling script (Collections::ServiceCollection::albumById)
Status: RESOLVED FIXED
Alias: None
Product: amarok
Classification: Unclassified
Component: Tools/Script Manager (show other bugs)
Version: 2.7-git
Platform: Compiled Sources Linux
: NOR crash (vote)
Target Milestone: 2.8
Assignee: Amarok Developers
URL:
Keywords:
: 322533 (view as bug list)
Depends on:
Blocks:
 
Reported: 2013-06-18 20:03 UTC by Mark Kretschmann
Modified: 2013-07-18 15:42 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 2.8


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Kretschmann 2013-06-18 20:03:24 UTC
I had a script called "Free Music Charts" installed and enabled. As I wanted to disable the script in the settings dialog, Amarok crashed when I pressed Apply.

Here's the backtrace:

Application: Amarok (amarok), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7fd8e6e0a7c0 (LWP 21059))]

Thread 20 (Thread 0x7fd8d9f9e700 (LWP 21062)):
#0  0x00007fd8f80823cd in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fd8f07a6cdf in ?? () from /usr/lib/x86_64-linux-gnu/libpulse.so.0
#2  0x00007fd8f0798205 in pa_mainloop_poll () from /usr/lib/x86_64-linux-gnu/libpulse.so.0
#3  0x00007fd8f0798869 in pa_mainloop_iterate () from /usr/lib/x86_64-linux-gnu/libpulse.so.0
#4  0x00007fd8f0798920 in pa_mainloop_run () from /usr/lib/x86_64-linux-gnu/libpulse.so.0
#5  0x00007fd8f07a6c8f in ?? () from /usr/lib/x86_64-linux-gnu/libpulse.so.0
#6  0x00007fd8eb92c143 in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-3.0.so
#7  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8d9f9e700) at pthread_create.c:311
#8  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 19 (Thread 0x7fd8d5dd9700 (LWP 21064)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:238
#1  0x00007fd8f8bf70a7 in wait (time=60000, this=0x212cc80) at thread/qwaitcondition_unix.cpp:84
#2  QWaitCondition::wait (this=<optimized out>, mutex=0x212c9a8, time=60000) at thread/qwaitcondition_unix.cpp:158
#3  0x00007fd8fbeda4c4 in AbstractDirectoryWatcher::run (this=0x212c980) at /home/mark/Devel/src/amarok/src/scanner/AbstractDirectoryWatcher.cpp:65
#4  0x00007fd8f64bde3a in ThreadWeaver::JobRunHelper::runTheJob (this=this@entry=0x7fd8d5dd8d70, th=th@entry=0x209a660, job=job@entry=0x212c980) at ../../../threadweaver/Weaver/Job.cpp:106
#5  0x00007fd8f64bdfb1 in ThreadWeaver::Job::execute (this=0x212c980, th=0x209a660) at ../../../threadweaver/Weaver/Job.cpp:135
#6  0x00007fd8f64bd60f in ThreadWeaver::ThreadRunHelper::run (this=this@entry=0x7fd8d5dd8dc0, parent=0x212dc40, th=th@entry=0x209a660) at ../../../threadweaver/Weaver/Thread.cpp:95
#7  0x00007fd8f64bd6cb in ThreadWeaver::Thread::run (this=0x209a660) at ../../../threadweaver/Weaver/Thread.cpp:142
#8  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x209a660) at thread/qthread_unix.cpp:338
#9  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8d5dd9700) at pthread_create.c:311
#10 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 18 (Thread 0x7fd8cb2e8700 (LWP 21065)):
#0  g_main_context_prepare (context=context@entry=0x7fd8bc0009a0, priority=priority@entry=0x7fd8cb2e7c38) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3323
#1  0x00007fd8f28900fe in g_main_context_iterate (context=context@entry=0x7fd8bc0009a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3681
#2  0x00007fd8f2890304 in g_main_context_iteration (context=0x7fd8bc0009a0, may_block=1) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3762
#3  0x00007fd8f8d22036 in QEventDispatcherGlib::processEvents (this=0x7fd8bc0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#4  0x00007fd8f8cf238f in QEventLoop::processEvents (this=this@entry=0x7fd8cb2e7d90, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007fd8f8cf2618 in QEventLoop::exec (this=this@entry=0x7fd8cb2e7d90, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007fd8f8bf4410 in QThread::exec (this=this@entry=0x2130cb0) at thread/qthread.cpp:542
#7  0x00007fd8f8cd3edf in QInotifyFileSystemWatcherEngine::run (this=0x2130cb0) at io/qfilesystemwatcher_inotify.cpp:256
#8  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x2130cb0) at thread/qthread_unix.cpp:338
#9  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8cb2e8700) at pthread_create.c:311
#10 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 17 (Thread 0x7fd8ca040700 (LWP 21066)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f8bf714b in wait (time=18446744073709551615, this=0x212dd90) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=this@entry=0x212dc68, mutex=0x20a1da0, time=time@entry=18446744073709551615) at thread/qwaitcondition_unix.cpp:158
#3  0x00007fd8f64bc041 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x212dc40, th=0x2457240) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365
#4  0x00007fd8f64be94b in ThreadWeaver::WorkingHardState::applyForWork (this=0x1ab76e0, th=0x2457240) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71
#5  0x00007fd8f64bd63f in ThreadWeaver::ThreadRunHelper::run (this=this@entry=0x7fd8ca03fdc0, parent=0x212dc40, th=th@entry=0x2457240) at ../../../threadweaver/Weaver/Thread.cpp:87
#6  0x00007fd8f64bd6cb in ThreadWeaver::Thread::run (this=0x2457240) at ../../../threadweaver/Weaver/Thread.cpp:142
#7  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x2457240) at thread/qthread_unix.cpp:338
#8  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8ca040700) at pthread_create.c:311
#9  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 16 (Thread 0x7fd8c983f700 (LWP 21067)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f8bf714b in wait (time=18446744073709551615, this=0x212dd90) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=this@entry=0x212dc68, mutex=0x20a1da0, time=time@entry=18446744073709551615) at thread/qwaitcondition_unix.cpp:158
#3  0x00007fd8f64bc041 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x212dc40, th=0x249db70) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365
#4  0x00007fd8f64be94b in ThreadWeaver::WorkingHardState::applyForWork (this=0x1ab76e0, th=0x249db70) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71
#5  0x00007fd8f64be964 in ThreadWeaver::WorkingHardState::applyForWork (this=0x1ab76e0, th=0x249db70) at ../../../threadweaver/Weaver/WorkingHardState.cpp:74
#6  0x00007fd8f64bd63f in ThreadWeaver::ThreadRunHelper::run (this=this@entry=0x7fd8c983edc0, parent=0x212dc40, th=th@entry=0x249db70) at ../../../threadweaver/Weaver/Thread.cpp:87
#7  0x00007fd8f64bd6cb in ThreadWeaver::Thread::run (this=0x249db70) at ../../../threadweaver/Weaver/Thread.cpp:142
#8  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x249db70) at thread/qthread_unix.cpp:338
#9  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8c983f700) at pthread_create.c:311
#10 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 15 (Thread 0x7fd8c903e700 (LWP 21068)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f8bf714b in wait (time=18446744073709551615, this=0x212dd90) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=this@entry=0x212dc68, mutex=0x20a1da0, time=time@entry=18446744073709551615) at thread/qwaitcondition_unix.cpp:158
#3  0x00007fd8f64bc041 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x212dc40, th=0x7fd8c00030e0) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365
#4  0x00007fd8f64be94b in ThreadWeaver::WorkingHardState::applyForWork (this=0x1ab76e0, th=0x7fd8c00030e0) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71
#5  0x00007fd8f64bd63f in ThreadWeaver::ThreadRunHelper::run (this=this@entry=0x7fd8c903ddc0, parent=0x212dc40, th=th@entry=0x7fd8c00030e0) at ../../../threadweaver/Weaver/Thread.cpp:87
#6  0x00007fd8f64bd6cb in ThreadWeaver::Thread::run (this=0x7fd8c00030e0) at ../../../threadweaver/Weaver/Thread.cpp:142
#7  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x7fd8c00030e0) at thread/qthread_unix.cpp:338
#8  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8c903e700) at pthread_create.c:311
#9  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 14 (Thread 0x7fd8b3fff700 (LWP 21069)):
#0  0x00007fd8f2861280 in pthread_mutex_lock@plt () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007fd8f28cf5c1 in g_mutex_lock (mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:210
#2  0x00007fd8f28900d5 in g_main_context_iterate (context=context@entry=0x7fd8ac0009a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3668
#3  0x00007fd8f2890304 in g_main_context_iteration (context=0x7fd8ac0009a0, may_block=1) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3762
#4  0x00007fd8f8d22036 in QEventDispatcherGlib::processEvents (this=0x7fd8ac0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#5  0x00007fd8f8cf238f in QEventLoop::processEvents (this=this@entry=0x7fd8b3ffed90, flags=...) at kernel/qeventloop.cpp:149
#6  0x00007fd8f8cf2618 in QEventLoop::exec (this=this@entry=0x7fd8b3ffed90, flags=...) at kernel/qeventloop.cpp:204
#7  0x00007fd8f8bf4410 in QThread::exec (this=this@entry=0x2714870) at thread/qthread.cpp:542
#8  0x00007fd8f8cd3edf in QInotifyFileSystemWatcherEngine::run (this=0x2714870) at io/qfilesystemwatcher_inotify.cpp:256
#9  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x2714870) at thread/qthread_unix.cpp:338
#10 0x00007fd8f6e58f8e in start_thread (arg=0x7fd8b3fff700) at pthread_create.c:311
#11 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 13 (Thread 0x7fd8b18e8700 (LWP 21070)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8efac5575 in ?? () from /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4
#2  0x00007fd8efac55c9 in ?? () from /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4
#3  0x00007fd8f6e58f8e in start_thread (arg=0x7fd8b18e8700) at pthread_create.c:311
#4  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 12 (Thread 0x7fd86b9ac700 (LWP 21073)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x7fd85c026700, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8d515ae25 in gst_queue_chain (pad=<optimized out>, buffer=0x7fd85c1372b0) at gstqueue.c:1014
#3  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x7fd85c014570, buffer=0x7fd85c1372b0) at gstpad.c:4710
#4  0x00007fd8ea71cdb1 in gst_pad_push (pad=pad@entry=0x7fd85c032ac0, buffer=buffer@entry=0x7fd85c1372b0) at gstpad.c:4710
#5  0x00007fd8d4aec9cc in gst_stream_synchronizer_sink_chain (pad=<optimized out>, buffer=0x7fd85c1372b0) at gststreamsynchronizer.c:601
#6  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x7fd85c032c40, buffer=0x7fd85c1372b0) at gstpad.c:4710
#7  0x00007fd8d516690b in gst_tee_handle_data (tee=tee@entry=0x1d8a9b0, data=0x7fd85c032db8, data@entry=0x7fd85c1372b0, is_list=is_list@entry=0) at gsttee.c:722
#8  0x00007fd8d5166adf in gst_tee_chain (pad=<optimized out>, buffer=0x7fd85c1372b0) at gsttee.c:828
#9  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x7fd85c014230, buffer=0x7fd85c1372b0) at gstpad.c:4710
#10 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x324b600, buffer=buffer@entry=0x7fd85c1372b0) at gstpad.c:4710
#11 0x00007fd8d5151e8d in gst_selector_pad_chain (pad=0x7fd85c028140, buf=0x7fd85c1372b0) at gstinputselector.c:854
#12 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2058510, buffer=0x7fd85c1372b0) at gstpad.c:4710
#13 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x3212a30, buffer=0x7fd85c1372b0) at gstpad.c:4710
#14 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x324b480, buffer=0x7fd85c1372b0) at gstpad.c:4710
#15 0x00007fd86af7ecdc in ?? () from /usr/lib/x86_64-linux-gnu/gstreamer-0.10/libgstflump3dec.so
#16 0x00007fd86af7fcaf in ?? () from /usr/lib/x86_64-linux-gnu/gstreamer-0.10/libgstflump3dec.so
#17 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x324b000, buffer=buffer@entry=0x7fd85c137030) at gstpad.c:4710
#18 0x00007fd8ea9b97ca in gst_base_parse_push_frame (parse=parse@entry=0x1c76800, frame=frame@entry=0x7fd86b9abcf0) at gstbaseparse.c:1988
#19 0x00007fd8ea9ba80e in gst_base_parse_handle_and_push_frame (parse=parse@entry=0x1c76800, frame=frame@entry=0x7fd86b9abcf0, klass=0x1c7d400) at gstbaseparse.c:1765
#20 0x00007fd8ea9bd1a5 in gst_base_parse_loop (pad=<optimized out>) at gstbaseparse.c:2826
#21 0x00007fd8ea742e34 in gst_task_func (task=0x324f030) at gsttask.c:327
#22 0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#23 0x00007fd8f28b3eb5 in g_thread_proxy (data=0x31f36d0) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#24 0x00007fd8f6e58f8e in start_thread (arg=0x7fd86b9ac700) at pthread_create.c:311
#25 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 11 (Thread 0x7fd86acee700 (LWP 21074)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x203aba0, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8d515b6b5 in gst_queue_loop (pad=<optimized out>) at gstqueue.c:1252
#3  0x00007fd8ea742e34 in gst_task_func (task=0x324f930) at gsttask.c:327
#4  0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#5  0x00007fd8f28b3eb5 in g_thread_proxy (data=0x7fd85c002c50) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#6  0x00007fd8f6e58f8e in start_thread (arg=0x7fd86acee700) at pthread_create.c:311
#7  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 10 (Thread 0x7fd86a4ed700 (LWP 21075)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x202fbb0, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8d515ae25 in gst_queue_chain (pad=<optimized out>, buffer=0x7fd84000dc00) at gstqueue.c:1014
#3  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2019440, buffer=0x7fd84000dc00) at gstpad.c:4710
#4  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2058a20, buffer=0x7fd84000dc00) at gstpad.c:4710
#5  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x7fd85c0327c0, buffer=0x7fd84000dc00) at gstpad.c:4710
#6  0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd84000dc00) at gstbasetransform.c:2658
#7  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x7fd85c0324c0, buffer=0x7fd84000dc00) at gstpad.c:4710
#8  0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd84000dc00) at gstbasetransform.c:2658
#9  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x205ebf0, buffer=0x7fd84000dc00) at gstpad.c:4710
#10 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x324ba80, buffer=buffer@entry=0x7fd84000dc00) at gstpad.c:4710
#11 0x00007fd8d515bdf6 in gst_queue_push_one (queue=0x200b520) at gstqueue.c:1156
#12 gst_queue_loop (pad=<optimized out>) at gstqueue.c:1264
#13 0x00007fd8ea742e34 in gst_task_func (task=0x324fb30) at gsttask.c:327
#14 0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#15 0x00007fd8f28b3eb5 in g_thread_proxy (data=0x7fd85c002ca0) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#16 0x00007fd8f6e58f8e in start_thread (arg=0x7fd86a4ed700) at pthread_create.c:311
#17 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 9 (Thread 0x7fd869cec700 (LWP 21076)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x2018270, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8d515ae25 in gst_queue_chain (pad=<optimized out>, buffer=0x7fd85c12b2b0) at gstqueue.c:1014
#3  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20192a0, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#4  0x00007fd8ea71cdb1 in gst_pad_push (pad=pad@entry=0x2030680, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#5  0x00007fd8d51665e0 in gst_tee_do_push (is_list=0, data=0x7fd85c12b2b0, pad=0x2030680, tee=0x1d8a290) at gsttee.c:675
#6  gst_tee_handle_data (tee=tee@entry=0x1d8a290, data=data@entry=0x7fd85c12b2b0, is_list=is_list@entry=0) at gsttee.c:754
#7  0x00007fd8d5166adf in gst_tee_chain (pad=<optimized out>, buffer=0x7fd85c12b2b0) at gsttee.c:828
#8  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2030200, buffer=buffer@entry=0x7fd85c12b2b0) at gstpad.c:4710
#9  0x00007fd8d515bdf6 in gst_queue_push_one (queue=0x200a5c0) at gstqueue.c:1156
#10 gst_queue_loop (pad=<optimized out>) at gstqueue.c:1264
#11 0x00007fd8ea742e34 in gst_task_func (task=0x324fa30) at gsttask.c:327
#12 0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#13 0x00007fd8f28b3eb5 in g_thread_proxy (data=0x7fd85c002cf0) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#14 0x00007fd8f6e58f8e in start_thread (arg=0x7fd869cec700) at pthread_create.c:311
#15 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 8 (Thread 0x7fd8694eb700 (LWP 21077)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x1df7c10, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8ea9c46dc in gst_base_sink_wait_preroll (sink=sink@entry=0x1f833b0) at gstbasesink.c:2279
#3  0x00007fd8ea9c4887 in gst_base_sink_do_preroll (sink=sink@entry=0x1f833b0, obj=obj@entry=0x7fd85c18d280) at gstbasesink.c:2356
#4  0x00007fd8ea9c6205 in gst_base_sink_do_sync (obj_type=2 '\002', step_end=<synthetic pointer>, late=<synthetic pointer>, obj=0x7fd85c18d280, basesink=0x1f833b0, pad=<optimized out>) at gstbasesink.c:2541
#5  gst_base_sink_render_object (basesink=basesink@entry=0x1f833b0, obj_type=obj_type@entry=2 '\002', obj=obj@entry=0x7fd85c18d280, pad=0x1dfc0c0) at gstbasesink.c:2978
#6  0x00007fd8ea9c863f in gst_base_sink_queue_object_unlocked (basesink=basesink@entry=0x1f833b0, obj_type=obj_type@entry=2 '\002', obj=obj@entry=0x7fd85c18d280, prerollable=prerollable@entry=1, pad=0x1dfc0c0) at gstbasesink.c:3295
#7  0x00007fd8ea9c8b48 in gst_base_sink_chain_unlocked (basesink=basesink@entry=0x1f833b0, obj_type=<optimized out>, obj=obj@entry=0x7fd85c18d280, pad=0x1dfc0c0) at gstbasesink.c:3677
#8  0x00007fd8ea9c8e7f in gst_base_sink_chain_main (basesink=0x1f833b0, pad=0x1dfc0c0, obj_type=<optimized out>, obj=0x7fd85c18d280) at gstbasesink.c:3715
#9  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x1dfc6c0, buffer=0x7fd85c18d280) at gstpad.c:4710
#10 0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c18d280) at gstbasetransform.c:2658
#11 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x1dfccc0, buffer=0x7fd85c18d280) at gstpad.c:4710
#12 0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c18d280) at gstbasetransform.c:2658
#13 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x1dfc3c0, buffer=0x7fd85c18d280) at gstpad.c:4710
#14 0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c18d280) at gstbasetransform.c:2658
#15 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x1dfc9c0, buffer=buffer@entry=0x7fd85c18d280) at gstpad.c:4710
#16 0x00007fd8d515bdf6 in gst_queue_push_one (queue=0x200a0a0) at gstqueue.c:1156
#17 gst_queue_loop (pad=<optimized out>) at gstqueue.c:1264
#18 0x00007fd8ea742e34 in gst_task_func (task=0x324f630) at gsttask.c:327
#19 0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#20 0x00007fd8f28b3eb5 in g_thread_proxy (data=0x7fd85c002d40) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#21 0x00007fd8f6e58f8e in start_thread (arg=0x7fd8694eb700) at pthread_create.c:311
#22 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 7 (Thread 0x7fd868cea700 (LWP 21078)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x2018330, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8ea9c46dc in gst_base_sink_wait_preroll (sink=sink@entry=0x201ad70) at gstbasesink.c:2279
#3  0x00007fd8ea9c4887 in gst_base_sink_do_preroll (sink=sink@entry=0x201ad70, obj=obj@entry=0x7fd854004a20) at gstbasesink.c:2356
#4  0x00007fd8ea9c6205 in gst_base_sink_do_sync (obj_type=2 '\002', step_end=<synthetic pointer>, late=<synthetic pointer>, obj=0x7fd854004a20, basesink=0x201ad70, pad=<optimized out>) at gstbasesink.c:2541
#5  gst_base_sink_render_object (basesink=basesink@entry=0x201ad70, obj_type=obj_type@entry=2 '\002', obj=obj@entry=0x7fd854004a20, pad=0x1dfce40) at gstbasesink.c:2978
#6  0x00007fd8ea9c863f in gst_base_sink_queue_object_unlocked (basesink=basesink@entry=0x201ad70, obj_type=obj_type@entry=2 '\002', obj=obj@entry=0x7fd854004a20, prerollable=prerollable@entry=1, pad=0x1dfce40) at gstbasesink.c:3295
#7  0x00007fd8ea9c8b48 in gst_base_sink_chain_unlocked (basesink=basesink@entry=0x201ad70, obj_type=<optimized out>, obj=obj@entry=0x7fd854004a20, pad=0x1dfce40) at gstbasesink.c:3677
#8  0x00007fd8ea9c8e7f in gst_base_sink_chain_main (basesink=0x201ad70, pad=0x1dfce40, obj_type=<optimized out>, obj=0x7fd854004a20) at gstbasesink.c:3715
#9  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20117c0, buffer=0x7fd854004a20) at gstpad.c:4710
#10 0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c18d280) at gstbasetransform.c:2658
#11 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20114c0, buffer=0x7fd85c18d280) at gstpad.c:4710
#12 0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c18d280) at gstbasetransform.c:2658
#13 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20111c0, buffer=buffer@entry=0x7fd85c18d280) at gstpad.c:4710
#14 0x00007fd8d515bdf6 in gst_queue_push_one (queue=0x200a330) at gstqueue.c:1156
#15 gst_queue_loop (pad=<optimized out>) at gstqueue.c:1264
#16 0x00007fd8ea742e34 in gst_task_func (task=0x324f730) at gsttask.c:327
#17 0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#18 0x00007fd8f28b3eb5 in g_thread_proxy (data=0x7fd85c002d90) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#19 0x00007fd8f6e58f8e in start_thread (arg=0x7fd868cea700) at pthread_create.c:311
#20 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 6 (Thread 0x7fd85bfff700 (LWP 21079)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f28cf83f in g_cond_wait (cond=0x1fb2150, mutex=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthread-posix.c:756
#2  0x00007fd8d515ae25 in gst_queue_chain (pad=<optimized out>, buffer=0x7fd85c12b2b0) at gstqueue.c:1014
#3  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2019100, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#4  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20650b0, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#5  0x00007fd8d516690b in gst_tee_handle_data (tee=tee@entry=0x1d8a750, data=0x2065228, data@entry=0x7fd85c12b2b0, is_list=is_list@entry=0) at gsttee.c:722
#6  0x00007fd8d5166adf in gst_tee_chain (pad=<optimized out>, buffer=0x7fd85c12b2b0) at gsttee.c:828
#7  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2058000, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#8  0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20554f0, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#9  0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c12b2b0) at gstbasetransform.c:2658
#10 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x2055af0, buffer=0x7fd85c12b2b0) at gstpad.c:4710
#11 0x00007fd8ea9d68dc in gst_base_transform_chain (pad=<optimized out>, buffer=0x7fd85c12b2b0) at gstbasetransform.c:2658
#12 0x00007fd8ea71cdb1 in gst_pad_push (pad=0x20557f0, buffer=buffer@entry=0x7fd85c12b2b0) at gstpad.c:4710
#13 0x00007fd8d515bdf6 in gst_queue_push_one (queue=0x200b000) at gstqueue.c:1156
#14 gst_queue_loop (pad=<optimized out>) at gstqueue.c:1264
#15 0x00007fd8ea742e34 in gst_task_func (task=0x324f830) at gsttask.c:327
#16 0x00007fd8f28b46f2 in g_thread_pool_thread_proxy (data=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gthreadpool.c:309
#17 0x00007fd8f28b3eb5 in g_thread_proxy (data=0x7fd85c002de0) at /build/buildd/glib2.0-2.36.0/./glib/gthread.c:798
#18 0x00007fd8f6e58f8e in start_thread (arg=0x7fd85bfff700) at pthread_create.c:311
#19 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 5 (Thread 0x7fd85b7fe700 (LWP 21080)):
#0  0x00007fd8f80823cd in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fd8f28901dc in g_main_context_poll (n_fds=1, fds=0x7fd8440025c0, timeout=3668, context=0x7fd8440009a0, priority=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3995
#2  g_main_context_iterate (context=context@entry=0x7fd8440009a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3696
#3  0x00007fd8f2890304 in g_main_context_iteration (context=0x7fd8440009a0, may_block=1) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3762
#4  0x00007fd8f8d22036 in QEventDispatcherGlib::processEvents (this=0x7fd8440008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#5  0x00007fd8f8cf238f in QEventLoop::processEvents (this=this@entry=0x7fd85b7fddc0, flags=...) at kernel/qeventloop.cpp:149
#6  0x00007fd8f8cf2618 in QEventLoop::exec (this=this@entry=0x7fd85b7fddc0, flags=...) at kernel/qeventloop.cpp:204
#7  0x00007fd8f8bf4410 in QThread::exec (this=<optimized out>) at thread/qthread.cpp:542
#8  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x24abf60) at thread/qthread_unix.cpp:338
#9  0x00007fd8f6e58f8e in start_thread (arg=0x7fd85b7fe700) at pthread_create.c:311
#10 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 4 (Thread 0x7fd85adce700 (LWP 21081)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f4f03b27 in QTWTF::TCMalloc_PageHeap::scavengerThread (this=0x7fd8f5211660 <QTWTF::pageheap_memory>) at ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastMalloc.cpp:2359
#2  0x00007fd8f4f03b59 in QTWTF::TCMalloc_PageHeap::runScavengerThread (context=<optimized out>) at ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastMalloc.cpp:1464
#3  0x00007fd8f6e58f8e in start_thread (arg=0x7fd85adce700) at pthread_create.c:311
#4  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 3 (Thread 0x7fd7b3fff700 (LWP 21116)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd8f8bf714b in wait (time=18446744073709551615, this=0x4ff1780) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=this@entry=0x4a2f258, mutex=mutex@entry=0x4a2f250, time=time@entry=18446744073709551615) at thread/qwaitcondition_unix.cpp:158
#3  0x00007fd8fa09e786 in QFileInfoGatherer::run (this=0x4a2f240) at dialogs/qfileinfogatherer.cpp:214
#4  0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x4a2f240) at thread/qthread_unix.cpp:338
#5  0x00007fd8f6e58f8e in start_thread (arg=0x7fd7b3fff700) at pthread_create.c:311
#6  0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 2 (Thread 0x7fd7b8b56700 (LWP 21117)):
#0  0x00007fd8f8080b0d in read () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fd8f28ce6cf in read (__nbytes=16, __buf=0x7fd7b8b55ba0, __fd=<optimized out>) at /usr/include/x86_64-linux-gnu/bits/unistd.h:44
#2  g_wakeup_acknowledge (wakeup=0x7fd7b4001f90) at /build/buildd/glib2.0-2.36.0/./glib/gwakeup.c:212
#3  0x00007fd8f288fd3c in g_main_context_check (context=context@entry=0x7fd7b4003440, max_priority=2147483647, fds=fds@entry=0x7fd7b4003e50, n_fds=n_fds@entry=1) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3502
#4  0x00007fd8f2890175 in g_main_context_iterate (context=context@entry=0x7fd7b4003440, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3698
#5  0x00007fd8f2890304 in g_main_context_iteration (context=0x7fd7b4003440, may_block=1) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3762
#6  0x00007fd8f8d22036 in QEventDispatcherGlib::processEvents (this=0x7fd7b4003370, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#7  0x00007fd8f8cf238f in QEventLoop::processEvents (this=this@entry=0x7fd7b8b55d90, flags=...) at kernel/qeventloop.cpp:149
#8  0x00007fd8f8cf2618 in QEventLoop::exec (this=this@entry=0x7fd7b8b55d90, flags=...) at kernel/qeventloop.cpp:204
#9  0x00007fd8f8bf4410 in QThread::exec (this=this@entry=0x4ff1880) at thread/qthread.cpp:542
#10 0x00007fd8f8cd3edf in QInotifyFileSystemWatcherEngine::run (this=0x4ff1880) at io/qfilesystemwatcher_inotify.cpp:256
#11 0x00007fd8f8bf6bec in QThreadPrivate::start (arg=0x4ff1880) at thread/qthread_unix.cpp:338
#12 0x00007fd8f6e58f8e in start_thread (arg=0x7fd7b8b56700) at pthread_create.c:311
#13 0x00007fd8f808ee1d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 1 (Thread 0x7fd8e6e0a7c0 (LWP 21059)):
[KCrash Handler]
#6  0x00007fd8fbd8648a in QMap<int, KSharedPtr<Meta::Album> >::value (this=0x35e2c68, akey=@0x7fff00cb4c94: 1) at /usr/include/qt4/QtCore/qmap.h:502
#7  0x00007fd8fbd84d6d in Collections::ServiceCollection::albumById (this=0x35e2c10, id=1) at /home/mark/Devel/src/amarok/src/services/ServiceCollection.cpp:133
#8  0x00007fd8fbb90bc2 in Collections::ScriptableServiceQueryMaker::fetchTracks (this=0x51c8620) at /home/mark/Devel/src/amarok/src/services/scriptable/ScriptableServiceQueryMaker.cpp:312
#9  0x00007fd8fbb92356 in Collections::ScriptableServiceQueryMaker::qt_static_metacall (_o=0x51c8620, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x51ca550) at /home/mark/Devel/build/amarok/src/ScriptableServiceQueryMaker.moc:59
#10 0x00007fd8f8d0d5be in QObject::event (this=0x51c8620, e=<optimized out>) at kernel/qobject.cpp:1194
#11 0x00007fd8f9bad8ec in QApplicationPrivate::notify_helper (this=this@entry=0x19e56c0, receiver=receiver@entry=0x51c8620, e=e@entry=0x51ca180) at kernel/qapplication.cpp:4567
#12 0x00007fd8f9bb025b in QApplication::notify (this=this@entry=0x7fff00cb5de8, receiver=receiver@entry=0x51c8620, e=e@entry=0x51ca180) at kernel/qapplication.cpp:4428
#13 0x00007fd8fc836af6 in KApplication::notify (this=0x7fff00cb5de8, receiver=0x51c8620, event=0x51ca180) at ../../kdeui/kernel/kapplication.cpp:311
#14 0x00007fd8f8cf363e in QCoreApplication::notifyInternal (this=0x7fff00cb5de8, receiver=receiver@entry=0x51c8620, event=event@entry=0x51ca180) at kernel/qcoreapplication.cpp:946
#15 0x00007fd8f8cf7171 in sendEvent (event=0x51ca180, receiver=0x51c8620) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
#16 QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0, data=0x18f51f0) at kernel/qcoreapplication.cpp:1570
#17 0x00007fd8f8cf74a3 in QCoreApplication::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0) at kernel/qcoreapplication.cpp:1463
#18 0x00007fd8f8d21e83 in sendPostedEvents () at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:236
#19 postEventSourceDispatch (s=s@entry=0x19e4940) at kernel/qeventdispatcher_glib.cpp:279
#20 0x00007fd8f288ff05 in g_main_dispatch (context=0x19e4880) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3054
#21 g_main_context_dispatch (context=context@entry=0x19e4880) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3630
#22 0x00007fd8f2890248 in g_main_context_iterate (context=context@entry=0x19e4880, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3701
#23 0x00007fd8f2890304 in g_main_context_iteration (context=0x19e4880, may_block=1) at /build/buildd/glib2.0-2.36.0/./glib/gmain.c:3762
#24 0x00007fd8f8d22016 in QEventDispatcherGlib::processEvents (this=0x19d7d90, flags=...) at kernel/qeventdispatcher_glib.cpp:424
#25 0x00007fd8f9c5313e in QGuiEventDispatcherGlib::processEvents (this=<optimized out>, flags=...) at kernel/qguieventdispatcher_glib.cpp:204
#26 0x00007fd8f8cf238f in QEventLoop::processEvents (this=this@entry=0x7fff00cb5720, flags=...) at kernel/qeventloop.cpp:149
#27 0x00007fd8f8cf2618 in QEventLoop::exec (this=this@entry=0x7fff00cb5720, flags=...) at kernel/qeventloop.cpp:204
#28 0x00007fd8f8cf7cf6 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1218
#29 0x000000000040f92e in main (argc=4, argv=0x7fff00cb7188) at /home/mark/Devel/src/amarok/src/main.cpp:329


Reproducible: Always
Comment 1 Mark Kretschmann 2013-06-20 09:25:20 UTC
I should note that the script was showing an error notification in Amarok on that day. The error had to do with being unable to access its web service.

My guess is that the bug gets triggered when no collection data was populated by a script.
Comment 2 Anmol Ahuja 2013-06-21 13:24:32 UTC
Git commit f21c1bdbc325edeb36e4160fd23747c774179700 by Anmol Ahuja.
Committed on 21/06/2013 at 13:22.
Pushed by anmolahuja into branch 'master'.

Destroy ScriptableServiceQueryMaker if parent collection destroyed.
Set servicePtr to null on destruction, check for null in related methods.
FIXED-IN: 2.8

M  +7    -3    src/ScriptManager.cpp
M  +1    -1    src/services/scriptable/ScriptableService.cpp
M  +1    -0    src/services/scriptable/ScriptableServiceQueryMaker.cpp

http://commits.kde.org/amarok/f21c1bdbc325edeb36e4160fd23747c774179700
Comment 3 Mark Kretschmann 2013-07-18 15:42:28 UTC
*** Bug 322533 has been marked as a duplicate of this bug. ***