Closed GoogleCodeExporter closed 9 years ago
I got the same issue on the attached file; MacOS X 10.7 running with dev
snapshot r267. Commenting out the STILL_LINKED check in elst.h
(ELIST_ITERATOR::add_after_then_move) lets it work. This will therefore not
show up on platforms which define NDEBUG (which eliminates these checks).
colpartition.cpp seems like it is taking nodes from a CLIST_ITERATOR (which
does not null out next/prev links since it does not know about them) and
inserting using an ELIST_ITERATOR, but apparently the node was part of some
list earlier having its next link set, and either not properly taken out, or
still existing in it.
Original comment by clindb...@gmail.com
on 12 Oct 2011 at 3:35
Attachments:
A bit of a "me too" adding another test case. I cropped out the minimal part
of the image which would reproduce the problem.
Original comment by matthew....@gmail.com
on 16 Dec 2011 at 5:23
Attachments:
Thanks to the previous commenter I've been able to track this issue to its root
cause. A ColPartition is being created which references the same BLOBNBOX
twice. When that gets processed inside MakeBlock, it asserts when it tries to
add it a second time.
The problem is the way the boxes get added in different places in
colpartition.cpp. Initially they get added with AddBox, which adds sorted and
unique using:
if (IsVerticalType())
boxes_.add_sorted(SortByBoxBottom<BLOBNBOX>, true, bbox2);
else
boxes_.add_sorted(SortByBoxLeft<BLOBNBOX>, true, bbox2);
Later, they can be added using Absorb(), which only sorts based on
bounding_box().left(). That's less strict than the sort operator, and totally
wrong for vertical types. Later again, Unique() adds more boxes using
AddBox(). At this point, boxes added in the wrong order inside Absorb() mean
the list is out of order, which can cause the same box to be added twice.
This could be fixed by removing the iterator "it" from the block which says
"Merge the two sorted lists", and adding bbox2 using the same add_sorted() code
as AddBox(). However, further down it seems that it can change the blob type,
which might break sorting. It may be safest just to force a re-sort at the end
of Absorb(), although I'm not sure how efficient that is as it requires a
memory allocation.
Original comment by matthew....@gmail.com
on 19 Dec 2011 at 5:28
This appears to be fixed in the latest SVN, as the bit of code I mentioned
above is no longer there. I can't be absolutely sure it's fixed because too
much has changed.. but it no longer crashes on the attached images.
Original comment by matthew....@gmail.com
on 13 Apr 2012 at 8:18
Original comment by zde...@gmail.com
on 13 Apr 2012 at 10:18
Original issue reported on code.google.com by
jwilk@jwilk.net
on 30 Aug 2011 at 6:19Attachments: