Andre Smagin <[email protected]> writes:
> On Sat, 13 May 2017 18:35:41 +0200
> Antoine Jacoutot <[email protected]> wrote:
>
>> Hi.
>>
>> audio/mpd is pretty useless on 6.1 i386, it cannot update it's database.
>
> Hello.
>
> mpd has issues updating the database on amd64 as well.
>
> If a directory in the root of music_directory (/storage/music in my case)
> is deleted and database update requested, mpd dies with this in the log:
>
> terminate called after throwing an instance of 'std::system_error'
> what(): Failed to access /storage/music/test: No such file or directory
>
> If a nested directory is deleted, mpd does not die on db update,
> but fails to remove the deleted directory from the database:
>
> May 22 09:48 : exception: Failed to access /storage/music/dts/test: No such
> file or directory
>
> Requesting an update specifically on the deleted directory works fine:
> mpc update test
> May 22 09:50 : update: removing test/The Four Seasons (Blu-ray, DTS,
> 2011)/Antonio Vialdi - The Four Seasons.flac
>
> This issue appears to exist in mpd-0.20.5, mpd-0.20.6, and mpd-0.20.8.
>
> Reverting back to mpd-0.19.21 appears to fix the problem.
> cvs up -D "Feb 21"; make install
>
> An addition, a thing I have not noticed before: mpd-0.19.21 is less
> forgiving to the filenames with, what I assume, are illegal UTF-8
> characters than the newer releases. Upon downgrading and requesting
> a database update, I had a few entries in the log like this:
>
> May 22 09:54 : update: removing flac/Classical/Edvard Grieg/The Grieg
> Edition/cd20 - Music for Strings/04 - ÅSe's Death, Op.46 No. 2.flac
> May 22 09:54 : update: removing flac/Classical/Gustav
> Mahler/Symphonies/Symphony No. 9/02 - Symphony No. 9 In D Major: II. Im Tempo
> Eines GemäChlichen LäNders.flac
> May 22 09:54 : update: removing mp3/_Korean/Park Hwa Yobi/5집/14 - 36.5°.mp3
>
> I suspect that the filesystem walking code had changed since mpd-0.19.21.
I just hit this on amd64, update with Ctrl+u in ncmpc. A backtrace with
egdb gives more details:
Thread 2 (thread 401205):
#0 0x00000f5a1a67463a in thrkill () at {standard input}:5
#1 0x00000f5a1a69b379 in *_libc_abort () at /usr/src/lib/libc/stdlib/abort.c:52
#2 0x00000f59f7765ef5 in __gnu_cxx::__verbose_terminate_handler () at
/usr/obj/ports/gcc-4.9.4/gcc-4.9.4/libstdc++-v3/libsupc++/vterminate.cc:95
#3 0x00000f59f7763a88 in __cxxabiv1::__terminate (handler=<optimized out>) at
/usr/obj/ports/gcc-4.9.4/gcc-4.9.4/libstdc++-v3/libsupc++/eh_terminate.cc:47
#4 0x00000f59f7763af1 in std::terminate () at
/usr/obj/ports/gcc-4.9.4/gcc-4.9.4/libstdc++-v3/libsupc++/eh_terminate.cc:57
#5 0x00000f59f7763d08 in __cxxabiv1::__cxa_throw (obj=0xf599b607980,
tinfo=0xf59f7a6ec60 <typeinfo for std::system_error>, dest=0xf59f77c3ff0
<std::system_error::~system_error()>)
at /usr/obj/ports/gcc-4.9.4/gcc-4.9.4/libstdc++-v3/libsupc++/eh_throw.cc:87
#6 0x00000f575372ea85 in FileInfo::FileInfo (this=<optimized out>, path=...,
follow_symlinks=<optimized out>) at ./src/fs/FileInfo.hxx:72
#7 0x00000f575373cbed in LocalStorage::GetInfo(char const*, bool) () at
/usr/local/include/c++/4.9.4/bits/basic_string.h:249
#8 0x00000f575372fb72 in GetDirectoryChildInfo (storage=..., directory=...,
name_utf8=0xf59fd3e7838 "audio.mp2") at src/db/update/UpdateIO.cxx:77
#9 directory_child_is_regular (storage=..., directory=...,
name_utf8=0xf59fd3e7838 "audio.mp2") at src/db/update/UpdateIO.cxx:84
#10 0x00000f57537228d3 in
UpdateWalk::PurgeDeletedFromDirectory(Directory&)::{lambda(Song&)#1}::operator()(Song&)
const (song=..., this=<optimized out>) at src/db/update/Walk.cxx:116
#11
Directory::ForEachSongSafe<UpdateWalk::PurgeDeletedFromDirectory(Directory&)::{lambda(Song&)#1}>(UpdateWalk::PurgeDeletedFromDirectory(Directory&)::{lambda(Song&)#1}&&)
(this=<optimized out>, t=<optimized out>)
at ./src/db/plugins/simple/Directory.hxx:222
#12 UpdateWalk::PurgeDeletedFromDirectory (this=0xf5a30e59d40, directory=...)
at src/db/update/Walk.cxx:115
#13 0x00000f575372233f in UpdateWalk::UpdateDirectory (this=0xf5a30e59d40,
directory=..., exclude_list=..., info=...) at src/db/update/Walk.cxx:358
#14 0x00000f5753722a72 in UpdateWalk::Walk (this=0xf5a30e59d40, root=...,
path=<optimized out>, discard=<optimized out>) at src/db/update/Walk.cxx:499
#15 0x00000f575372145b in UpdateService::Task() () at
/usr/local/include/c++/4.9.4/bits/basic_string.h:249
#16 0x00000f57537776fe in Thread::ThreadProc (ctx=0x0) at
src/thread/Thread.cxx:105
#17 0x00000f59b24768ce in _rthread_start (v=0x0) at
/usr/src/lib/librthread/rthread.c:114
#18 0x00000f5a1a6919bb in __tfork_thread () at
/usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
#19 0x0000000000000000 in ?? ()
The exception comes from an audio file that I have removed since the
last db update. That kinda makes your music collection append-only...
I just removed the existing db file for now.
--
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE