On 03/04/2011 11:04 PM, Michael Schwendt wrote: > Hello everyone! > > This post is related to Geeqie crashing in an assertion in file_data_unref > (see subject line). > > In addition to perusing more of the source code, I've received helpful --debug > output from a bug reporter, who can reproduce the issue with a few attempts, > while I don't manage to reproduce it: > > filedata.c:718: file_data_unref: deleting > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JPG', parent > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.jpg' > ** > ERROR:filedata.c:676:file_data_free: assertion failed: (fd->sidecar_files > == NULL) > > This has been encountered during loading images from an SD card. > > As one can see, it added a file (*.JPG) as its own sidecar file (*.jpg), > and file_data_unref cannot cope with that. > > This is because in filedata.c file_data_check_sidecars() > and check_case_insensitive_ext() a case-insensitive fstat is performed > for files with a generated list of potential sidecar file name extensions. > This gives wrong results on a case-insensitive file-system and apparently > adds .jpg as a sidecar file for .JPG. > > layout.c:2204: 0.341570 (+00000.033411) layout_new: end > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JPG' 1 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JPG' 0 0 > filedata.c:655: file_data_ref (2): > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JPG' @ filedata.c:398 > filedata.c:428: file_data_pool hit: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JPG' > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JPg' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.JpG' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.Jpg' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.jPG' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.jPg' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.jpG' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.jpg' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.CR2' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.Cr2' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.cR2' 0 0 > filedata.c:390: file_data_new: > '/media/EOS_DIGITAL/DCIM/100CANON/IMG_3230.cr2' 0 0 > > As a work-around, I've inserted a file ext comparison directly in > file_data_check_sidecars(), but I could imagine adding another one in > file_data_unref(). > > What do you think?
I don't think it's ever legitimate for file foo.jpg to have a sidecar foo.JPG, even on a case-sensitive filesystem. So doing a check in file_data_check_sidecars() sounds reasonable. I wouldn't add extra checks in file_data_unref() unless they are guaranteed to be correct for all filesystems (since it is definitely valid for foo.jpg and foo.JPG to _exist_, and we don't want to end up with memory/resource leaks in that case). --xsdg ------------------------------------------------------------------------------ What You Don't Know About Data Connectivity CAN Hurt You This paper provides an overview of data connectivity, details its effect on application quality, and explores various alternative solutions. http://p.sf.net/sfu/progress-d2d _______________________________________________ Geeqie-devel mailing list Geeqie-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geeqie-devel