Crash after selecting a *certain* directory
Hello, the following has happened several times, no clue why or how to resolve.
I’m editing a photo in a certain directory and ART crashes (very rare but sometimes this happens). I restart ART and go back to that dir in the Navigator > ART freezes. So I made a debug build to see what happens, below is the output: segfault. When I restart ART from the command line it outputs a glibmm error, see below, below.
I cleared the cache from within ART, that changes nothing. I renamed ./cache/ART to .cache/ART.off, but nothing changes either. Any idea what’s going on here?
When working in any other directory ART behaves normal. The “problematic” directory has a “normal” name (no spaces or special chars), as have the files in it.
paul@graveyron:~$ gdb ART
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
[…]
This GDB was configured as "x86_64-linux-gnu".
Reading symbols from ART...
(gdb) run
Starting program: /usr/local/bin/ART
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff0e09700 (LWP 5029)]
[some more threads… and then:]
(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_ymd: assertion 'datetime != NULL' failed
(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_hour: assertion 'datetime != NULL' failed
(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_minute: assertion 'datetime != NULL' failed
(ART:5025): GLib-CRITICAL **: 16:15:38.401: g_date_time_get_second: assertion 'datetime != NULL' failed
Thread 4 "ART" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffefe07700 (LWP 5031)]
0x00007ffff758b668 in g_date_time_to_unix ()
from /lib/x86_64-linux-gnu/libglib-2.0.so.0
(gdb) quit
A debugging session is active.
Inferior 1 [process 5025] will be killed.
Quit anyway? (y or n) y
paul@graveyron:~$ art
(art:5127): glibmm-ERROR **: 16:20:19.111:
unhandled exception (type std::exception) in signal handler:
what: vector::_M_range_check: __n (which is 2) >= this->size() (which is 2)
Traceer/breekpunt-instructie
paul@graveyron:~$
Comments (11)
-
repo owner -
reporter (gdb) backtrace
#0 0x00007ffff758b668 in g_date_time_to_unix ()
at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#10x00005555562d7aa1 in rtengine::FramesData::FramesData(Glib::ustring const&) (this=0x7fffbc00cda0, fname=...)
at /home/paul/apps/art/rtengine/imagedata.cc:319
#20x00005555562d543b in rtengine::FramesMetaData::fromFile(Glib::ustring const&) (fname=...) at /home/paul/apps/art/rtengine/imagedata.cc:60
#30x0000555556135cb6 in Thumbnail::getMetaData() (this=0x7fffbc0143d0)
at /home/paul/apps/art/rtgui/thumbnail.cc:1283
#40x0000555556134fdf in Thumbnail::loadRating() (this=0x7fffbc0143d0)
at /home/paul/apps/art/rtgui/thumbnail.cc:1200
#50x0000555556130bd9 in Thumbnail::loadProcParams(bool)
(this=0x7fffbc0143d0, load_rating=true)
at /home/paul/apps/art/rtgui/thumbnail.cc:404
#60x000055555612e154 in Thumbnail::Thumbnail(CacheManager*, Glib::ustring const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
(this=0x7fffbc0143d0, cm=0x555556a7b3a0 CacheManager::getInstance()::instance, fname=..., md5="9301e09283ee1b34558cf8a9622c8551")
at /home/paul/apps/art/rtgui/thumbnail.cc:67
#70x0000555555d7d566 in CacheManager::getEntry(Glib::ustring const&)
(this=0x555556a7b3a0 CacheManager::getInstance()::instance, fname=...)
at /home/paul/apps/art/rtgui/cachemanager.cc:124
--Type <RET> for more, q to quit, c to continue without paging--
#80x000055555608c221 in PreviewLoader::Impl::processNextJob()
(this=0x55555770e890) at /home/paul/apps/art/rtgui/previewloader.cc:112
#90x0000555556091365 in sigc::bound_mem_functor0<void, PreviewLoader::Impl>::operator()() const (this=0x5555576fb9d8)
at /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:1991
#100x00005555560912fa in std::__invoke_impl<void, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(std::__invoke_other, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&) (__f=...) at /usr/include/c++/9/bits/invoke.h:60
#110x00005555560912bf in std::__invoke<sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(sigc::bound_mem_functor0<void, PreviewLoader::Impl>&) (__fn=...)
at /usr/include/c++/9/bits/invoke.h:95
#120x00005555560911ec in std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>::__call<void>(std::tuple<>&&, std::_Index_tuple<>)
(this=0x5555576fb9d8, __args=...) at /usr/include/c++/9/functional:400
#130x0000555556090d95 in std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>::operator()<, void>() (this=0x5555576fb9d8)
at /usr/include/c++/9/functional:484
#140x00005555560909e7 in std::__invoke_impl<void, std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&>(std::__invoke_other, std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&) (__f=...)
at /usr/include/c++/9/bits/invoke.h:60
#150x0000555556090769 in std::__invoke<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&>(std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>&) (__fn=...) at /usr/include/c++/9/bits/invoke.h:95
#160x00005555560904a3 in std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run()::{lambda()#1}::operator()() const (this=0x7fffefe062c8)
at /usr/include/c++/9/future:1421
#170x0000555556090e64 in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run()::{lambda()#1}, void>::operator()() const (this=0x7fffefe062d0) at /usr/include/c++/9/future:1362
#18 0x0000555556090aa8 in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run()::{lambda()#1}, void> >::_M_invoke(std::_Any_data const&)
(__functor=...) at /usr/include/c++/9/bits/std_function.h:286
#190x0000555555d70278 in std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const
(this=0x7fffefe062d0) at /usr/include/c++/9/bits/std_function.h:688
#200x0000555555d6f9e6 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)
(this=0x5555576fb9b0, __f=0x7fffefe062d0, __did_set=0x7fffefe0622f)
at /usr/include/c++/9/future:561
#210x0000555555d71d89 in std::__invoke_impl<void, void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::__invoke_memfun_deref, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>--Type <RET> for more, q to quit, c to continue without paging--
&&, bool&&) (__f=
@0x7fffefe06270: (void (std::__future_base::_State_baseV2::)(class std::__future_base::_State_baseV2 * const, class std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> , bool )) 0x555555d6f9ac <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)>, __t=@0x7fffefe06240: 0x5555576fb9b0)
at /usr/include/c++/9/bits/invoke.h:73
#220x0000555555d70c3a in std::__invoke<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&) (__fn=
@0x7fffefe06270: (void (std::__future_base::_State_baseV2::)(class std::__future_base::_State_baseV2 * const, class std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> , bool )) 0x555555d6f9ac <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)>) at /usr/include/c++/9/bits/invoke.h:95
#230x0000555555d6fe78 in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)::{lambda()#1}::operator()() const (this=0x7fffefe061c0) at /usr/include/c++/9/mutex:671
#240x0000555555d6fea7 in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)::{lambda()#2}::operator()() const (this=0x0) at /usr/include/c++/9/mutex:676
#250x0000555555d6febc in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)::{lambda()#2}::_FUN() () at /usr/include/c++/9/mutex:676
#260x00007ffff57fa4df in __pthread_once_slow
(once_control=0x5555576fb9c8, init_routine=0x7ffff593ec20 <__once_proxy>)
at pthread_once.c:116
#270x0000555555d6eed8 in __gthread_once(__gthread_once_t*, void ()())
--Type <RET> for more, q to quit, c to continue without paging--
(__once=0x5555576fb9c8, __func=0x7ffff593ec20 <__once_proxy>)
at /usr/include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:700
#28 0x0000555555d6ff66 in std::call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool>(std::once_flag&, void (std::__future_base::_State_baseV2::&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>&&, bool&&)
(__once=..., __f=
@0x7fffefe06270: (void (std::__future_base::_State_baseV2::*)(class std::__future_base::_State_baseV2 * const, class std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> , bool )) 0x555555d6f9ac <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)>) at /usr/include/c++/9/mutex:683
#290x0000555555d6f54d in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)
(this=0x5555576fb9b0, __res=..., __ignore_failure=false)
at /usr/include/c++/9/future:401
#300x0000555556090515 in std::__future_base::_Task_state<std::_Bind<sigc::bound_mem_functor0<void, PreviewLoader::Impl> ()>, std::allocator<int>, void ()>::_M_run() (this=0x5555576fb9b0) at /usr/include/c++/9/future:1423
#310x0000555555db9ed1 in std::packaged_task<void ()>::operator()()
(this=0x55555787d000) at /usr/include/c++/9/future:1551
#320x000055555608d01f in rtengine::ThreadPool::enqueue<sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(rtengine::ThreadPool::Priority, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&)::{lambda()#1}::operator()() const
(this=0x55555787fa00)
at /home/paul/apps/art/rtgui/../rtengine/threadpool.h:159
#330x000055555608f50e in std::_Function_handler<void (), rtengine::ThreadPool::enqueue<sigc::bound_mem_functor0<void, PreviewLoader::Impl>&>(rtengine::ThreadPool::Priority, sigc::bound_mem_functor0<void, PreviewLoader::Impl>&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (__functor=...)
at /usr/include/c++/9/bits/std_function.h:300
#340x000055555630d178 in std::function<void ()>::operator()() const
(this=0x7fffb800e170) at /usr/include/c++/9/bits/std_function.h:688
#350x000055555630e0d2 in std::_Function_handler<void (), rtengine::ThreadPool::Task>::_M_invoke(std::_Any_data const&) (__functor=...)
at /usr/include/c++/9/bits/std_function.h:300
#360x000055555630d178 in std::function<void ()>::operator()() const
(this=0x7fffefe06410) at /usr/include/c++/9/bits/std_function.h:688
#370x000055555630c9c0 in rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}::operator()() const (__closure=0x555556b02568)
at /home/paul/apps/art/rtengine/threadpool.h:131
#380x000055555630f789 in std::__invoke_impl<void, rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}>(std::__invoke_other, rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}&&) (__f=...)
at /usr/include/c++/9/bits/invoke.h:60
#390x000055555630f71e in std::__invoke<rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}>(std::__invoke_result&&, (rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}&&)...) (__fn=...)
at /usr/include/c++/9/bits/invoke.h:95
#400x000055555630f6b0 in std::thread::_Invoker<std::tuple<rtengine::ThreadPool:--Type <RET> for more, q to quit, c to continue without paging--
:ThreadPool(unsigned long)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x555556b02568) at /usr/include/c++/9/thread:244
#410x000055555630f66d in std::thread::_Invoker<std::tuple<rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}> >::operator()() (this=0x555556b02568)
at /usr/include/c++/9/thread:251
#420x000055555630f63e in std::thread::_State_impl<std::thread::_Invoker<std::tuple<rtengine::ThreadPool::ThreadPool(unsigned long)::{lambda()#1}> > >::_M_run() (this=0x555556b02560) at /usr/include/c++/9/thread:195
#430x00007ffff593fde4 in () at /lib/x86_64-linux-gnu/libstdc++.so.6
#440x00007ffff57f1609 in start_thread (arg=<optimized out>)
at pthread_create.c:477
#45 0x00007ffff5714133 in clone ()
at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) -
repo owner thanks. From there, in gdb, you can type the following:
(gdb) up (gdb) print fname
this should show the offending file. Then you can maybe upload it together with the arp so I can understand what is going on. Thanks!
-
reporter Hello,
(gdb) up
#10x00005555562d7aa1 in rtengine::FramesData::FramesData (
this=0x7fffc40079b0, fname=...)
at /home/paul/apps/art/rtengine/imagedata.cc:319
319 timeStamp = d.to_unix();
(gdb) print fname
\$1 = (const Glib::ustring &) @0x7fffc4005520: {
static npos = 18446744073709551615,
string_ = "/home/paul/bozart22/commandes/sandrine_dec22/index2_3xup.jpg"}
(gdb)There’s no arp file, I deleted all of them to find out what happened…
-
reporter Hi Alberto, I moved all the files from named directory and re-added them one by one. ART crashes on the following file, it was edited in ART and has no arp file because I deleted them all to find out what happened… Still don’t understand what’s going on…
-
reporter Hmm, if I rename the first offending file to index2_3xup.jpg.off, the crash does not happen…
-
reporter Hi Alberto, I did some more testing. I copied the two original files above (original means: not edited in ART yet) to a new folder. I start ART in debug mode, navigate to that dir and open the second photo, the young lady with her mother. I use the tone equalizer to balance the tones, I save the file, everything ok. I open the other photo, the first one, do the same kind of editing and save. Then I see the following debug msg.
[Thread 0x7fffa6ffd700 (LWP 17884) exited]
[Thread 0x7fffa4ff9700 (LWP 17882) exited]
[New Thread 0x7fffa4ff9700 (LWP 17886)]
[Thread 0x7fffa5ffb700 (LWP 17883) exited]
[Detaching after fork from child process 17892]
[Detaching after fork from child process 17893]
/home/paul/Bureaublad/test/IMG_20220606_102107-1.jpg: Empty input file
/home/paul/Bureaublad/test/IMG_20220606_102107-1.jpg: Empty input file
[Thread 0x7fffa4ff9700 (LWP 17886) exited]
The Navigator shows only 3 images BUT the file has been saved and is readable in gThumb and Geeqie. Only thing: in both applications the thumbnails of the processed photos are corrupted (see attachment), but the files show up fine. Hitting F5 to refresh the Navigator leads to a crash.
Any ideas?
-
reporter Hello Alberto, some more info. I start ART in debug mode, I open the original photo of the young girl, set Tone Equalizer - Midtones to +65. An arp file is produced. Now I save the photo, the lines “Empty input file” appear again, the Navigator shows two photos instead of three (should be two originals and one saved), although the file is saved, again with corrupted thumbnail. There are differences between the jpg.arp and the jpg.out.arp, a diff produces the following output:
125c125
< DeconvAutoRadius=true
DeconvAutoRadius=false
134,135c134,135
< Temperature=6504
< Green=1
Temperature=6490
Green=1.002
137c137
< Multipliers=1;1;1;
Multipliers=0.99990000000000001;1;0.99990000000000001;
234c234
< Enabled=false
Enabled=true
237c237
< Band2=0
Band2=65
247,248c247,248
< W=15000
< H=15000
W=3001
H=4001
287,288c287,288
< FocalLength=0
< CropFactor=1
FocalLength=3.8999999999999999
CropFactor=6.0899999999999999
323c323
< Scale=1
Scale=0.23000000000000001
348c348
< InputProfile=(cameraICC)
InputProfile=(embedded)
589c589
< RefOutput=0;0;0;
RefOutput=2739.8720703125;2739.755859375;2740.07568359375;
593c593
< ExifKeys=Exif.Image.Copyright;Exif.Image.Artist;Exif.Image.ImageDescription;Exif.Photo.UserComment;Exif.Image.Make;Exif.Image.Model;Exif.Photo.LensModel;Exif.Photo.FNumber;Exif.Photo.ExposureTime;Exif.Photo.FocalLength;Exif.Photo.ISOSpeedRatings;Exif.Photo.ExposureBiasValue;Exif.Photo.Flash;Exif.Photo.DateTimeOriginal;Exif.Image.XResolution;Exif.Image.YResolution;
ExifKeys=Exif.Image.Artist;Exif.Image.Copyright;Exif.Image.ImageDescription;Exif.Image.Make;Exif.Image.Model;Exif.Image.XResolution;Exif.Image.YResolution;Exif.Photo.DateTimeOriginal;Exif.Photo.ExposureBiasValue;Exif.Photo.ExposureTime;Exif.Photo.FNumber;Exif.Photo.Flash;Exif.Photo.FocalLength;Exif.Photo.ISOSpeedRatings;Exif.Photo.LensModel;Exif.Photo.UserComment;
-
repo owner Hi,
I think you are conflating different problems here. The original problem was a segfault when reading a certain file. I can reproduce it with the first jpg you attached. So let’s keep this issue to that.
If you experience file corruption problems, please open a different issue, thanks!
-
repo owner - changed status to resolved
-
reporter Works well now, thanks!
- Log in to comment
hi,
Can you please provide a backtrace? (See rawpedia).
Also, this is most likely caused by one specific image and arp sidecar. If you can isolate the problem and attach the offending files, that would also be great (but maybe a backtrace is enough)
Thanks for reporting!