I currently have a reproducible hang in the lighttable. Version 3.2.1 of
darktable in Ubuntu 20.04. A possible workaround is described below.

- Open Darktable
- Images matching the filters last set are displayed
- Reset the collect module
- Darktable hangs
- Expected: All images are shown (and darktable does not hang)

Setting specific other filters in the collect module works fine, e.g. I can
open an individual previous film roll without any problem.

I suspected based on the logging (below) is that it's hanging whenever the
collect module matches a specific image (#4079) that's broken. I opened the
library.db in sqlitebrowser, and looked at the images table. There was
indeed no entry with id 4079, but the rows 4077 and 4080 referred to
group_id 4079. On a whim I changed the group_id of 4077 to 4077 etc.
Restarting darktable resulted in the same error but with a different id. In
fact the same inconsistency happened with a few more ids, I "fixed" them
with the same approach and after that, the bug did not trigger anymore.

Here's a screenshot of (a backup of) the corrupted db:
https://imgur.com/a/m7UdD9W

The first 8 ids are affected. I have to wonder what happened to image 4079,
4084, etc. Or worse, maybe other images (db rows) are missing, but don't
trigger a crash because they are not part of a group...

Cheers
Moritz

strace spams the following line over and over again:
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=5000},
0x7fff9515da80) = 0

Last couple of lines of darktable -d all, of which only

[image_cache_allocate] failed to open image 4079 from database: no more
rows available

stands out:

130,233841 [sql] /usr/src/packages/BUILD/src/common/image_cache.c:39,
function dt_image_cache_allocate(): prepare "SELECT id, group_id, film_id,
width, height, filename, maker, model, lens, exposure, aperture, iso,
focal_length, datetime_taken, flags, crop, orientation, focus_distance,
raw_parameters, longitude, latitude, altitude, color_matrix, colorspace,
version, raw_black, raw_maximum, aspect_ratio, exposure_bias,
import_timestamp, change_timestamp, export_timestamp, print_timestamp FROM
main.images WHERE id = ?1"
[image_cache_allocate] failed to open image 4079 from database: no more
rows available
130,234003 [sql] /usr/src/packages/BUILD/src/dtgtk/thumbnail.c:104,
function _image_update_group_tooltip(): prepare "SELECT id, version,
filename FROM main.images WHERE group_id = ?1"
130,234087 [sql] /usr/src/packages/BUILD/src/common/image.c:222, function
dt_image_full_path(): prepare "SELECT folder || '/' || filename FROM
main.images i, main.film_rolls f WHERE i.film_id = f.id and i.id = ?1"
130,234162 [sql] /usr/src/packages/BUILD/src/common/image.c:250, function
_image_local_copy_full_path(): prepare "SELECT folder || '/' || filename
FROM main.images i, main.film_rolls f WHERE i.film_id = f.id AND i.id = ?1"
130,234348 [sql] /usr/src/packages/BUILD/src/common/history.c:1488,
function dt_history_hash_get_status(): prepare "SELECT CASE  WHEN
basic_hash == current_hash THEN 1  WHEN auto_hash == current_hash THEN 2
 WHEN (basic_hash IS NULL OR current_hash != basic_hash) AND
(auto_hash IS NULL OR current_hash != auto_hash) THEN 4  ELSE 1 END AS
status FROM main.history_hash WHERE imgid = 4077"
130,234421 [sql] /usr/src/packages/BUILD/src/common/history.c:858, function
dt_history_get_items_as_string(): prepare "SELECT operation, enabled,
multi_name FROM main.history WHERE imgid=?1 ORDER BY num DESC"
130,235337 [sql] /usr/src/packages/BUILD/src/common/image_cache.c:39,
function dt_image_cache_allocate(): prepare "SELECT id, group_id, film_id,
width, height, filename, maker, model, lens, exposure, aperture, iso,
focal_length, datetime_taken, flags, crop, orientation, focus_distance,
raw_parameters, longitude, latitude, altitude, color_matrix, colorspace,
version, raw_black, raw_maximum, aspect_ratio, exposure_bias,
import_timestamp, change_timestamp, export_timestamp, print_timestamp FROM
main.images WHERE id = ?1"
130,235487 [sql] /usr/src/packages/BUILD/src/common/history.c:1488,
function dt_history_hash_get_status(): prepare "SELECT CASE  WHEN
basic_hash == current_hash THEN 1  WHEN auto_hash == current_hash THEN 2
 WHEN (basic_hash IS NULL OR current_hash != basic_hash) AND
(auto_hash IS NULL OR current_hash != auto_hash) THEN 4  ELSE 1 END AS
status FROM main.history_hash WHERE imgid = 4080"
130,235984 [sql] /usr/src/packages/BUILD/src/common/history.c:858, function
dt_history_get_items_as_string(): prepare "SELECT operation, enabled,
multi_name FROM main.history WHERE imgid=?1 ORDER BY num DESC"

____________________________________________________________________________
darktable user mailing list
to unsubscribe send a mail to [email protected]

Reply via email to