Skip Menu |

This queue is for tickets about the Tickit CPAN distribution.

Report information
The Basics
Id: 82930
Status: resolved
Priority: 0/
Queue: Tickit

People
Owner: Nobody in particular
Requestors: leonerd-cpan [...] leonerd.org.uk
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in: 0.26
Fixed in:
  • 0.25
  • 0.27



Subject: 0.26 causes display corruption through failed updates
Something in 0.26 has broken display updates. Regions of the screen fail to update after a while, causing the display to get more and more out of date. Works fine in 0.25. I suspect some logic around the rect/rectset migration into XS code. More investigation required. Until then I recommend not using 0.26 at all - stick with 0.25. -- Paul Evans
Yup; this confirms it: my $subwin = $rootwin->make_sub( 2, 2, 20, 50 ); my $exposed = 0; $subwin->set_on_expose( sub { $exposed++ } ); for ( 1 .. 100 ) { $subwin->expose( Tickit::Rect->new( top => 1, left => 1, lines => 3, cols => 20 ) ); flush_tickit; } is( $exposed, 100, '$exposed 100 times' ); # Failed test '$exposed 100 times' # at t/12window-expose.t line 120. # got: '12' # expected: '100' Reliably always 12. Not quite sure why. -- Paul Evans
Found it. Bug in libtickit which erroneously caused a TickitRectSet to try to grow the memory size of the object for every call to tickit_rectset_add(). Now fixed and the test passes. -- Paul Evans
Subject: rt82930.patch
=== modified file 'src/rectset.c' --- src/rectset.c2013-01-04 19:17:57 +0000 +++ src/rectset.c2013-01-25 00:24:44 +0000 @@ -62,7 +62,7 @@ static int insert_rect(TickitRectSet *trs, const TickitRect *r) { - if(trs->count + 1 < trs->size) { + if(trs->count + 1 > trs->size) { TickitRect *newrects = realloc(trs->rects, trs->size * 2 * sizeof(trs->rects[0])); if(!newrects) return 0;
Now released as 0.27. -- Paul Evans
Released as 0.27 -- Paul Evans