Hi Richard,

>> Aha, interesting. But this still rings no bell (no idea how this could be).
> 
> Well, anything that overwrite the memory location in which 'self' is stored 
> could cause this.
> The most common thing (as suggested by Wolfgang) would be if the object was 
> deallocated and the memory re-used (a retain/release error),

The object is not deallocated as I have shown with a log message in -dealloc. 

> but buffer overruns could also corrupt the memory.
> Fred's suggestion of running under valgrind should help find the problem in 
> either case.

This gave me nothing (see below).

valgrind reports


2018-05-22 11:23:16.323 TimberNav[7685:7685] MapView drawRect {x = 0; y = 0; 
width = 817; height = 334} ... _osmDrawing 0
2018-05-22 11:23:16.327 TimberNav[7685:7685] After super drawRect:rect
2018-05-22 11:23:16.328 TimberNav[7685:7685] bums
==7685== Use of uninitialised value of size 4
==7685==    at 0x8064DC2: _i_MapView__drawRect_ (MapView.m:168)
==7685==    by 0xBEAD8617: ???
==7685==
==7685== Invalid write of size 1
==7685==    at 0x8064DC2: _i_MapView__drawRect_ (MapView.m:168)
==7685==    by 0xBEAD8617: ???
==7685==  Address 0x134 is not stack'd, malloc'd or (recently) free'd
==7685==
==7685==
==7685== Process terminating with default action of signal 11 (SIGSEGV)
==7685==  Access not within mapped region at address 0x134
==7685==    at 0x8064DC2: _i_MapView__drawRect_ (MapView.m:168)
==7685==    by 0xBEAD8617: ???
==7685==  If you believe this happened as a result of a stack
==7685==  overflow in your program's main thread (unlikely but
==7685==  possible), you can try to increase the size of the
==7685==  main thread stack using the --main-stacksize= flag.
==7685==  The main thread stack size used in this run was 8388608.
==7685==
==7685== HEAP SUMMARY:
==7685==     in use at exit: 7,671,140 bytes in 99,510 blocks
==7685==   total heap usage: 345,414 allocs, 245,904 frees, 38,473,207 bytes 
allocated
==7685==
==7685== LEAK SUMMARY:
==7685==    definitely lost: 49,171 bytes in 1,041 blocks
==7685==    indirectly lost: 457,010 bytes in 8,088 blocks
==7685==      possibly lost: 3,449,433 bytes in 46,039 blocks
==7685==    still reachable: 3,715,526 bytes in 44,342 blocks
==7685==                       of which reachable via heuristic:
==7685==                         newarray           : 69,036 bytes in 303 blocks
==7685==         suppressed: 0 bytes in 0 blocks
==7685== Rerun with --leak-check=full to see details of leaked memory
==7685==
==7685== For counts of detected and suppressed errors, rerun with: -v
==7685== Use --track-origins=yes to see where uninitialised values come from
==7685== ERROR SUMMARY: 4 errors from 3 contexts (suppressed: 0 from 0)
==7685== Use of uninitialised value of size 4
==7685==    at 0x8064DC2: _i_MapView__drawRect_ (MapView.m:168)
==7685==    by 0xBEAD8617: ???
==7685==
==7685== Invalid write of size 1
==7685==    at 0x8064DC2: _i_MapView__drawRect_ (MapView.m:168)
==7685==    by 0xBEAD8617: ???
==7685==  Address 0x134 is not stack'd, malloc'd or (recently) free'd
==7685==
==7685==
==7685== Process terminating with default action of signal 11 (SIGSEGV)
==7685==  Access not within mapped region at address 0x134
==7685==    at 0x8064DC2: _i_MapView__drawRect_ (MapView.m:168)
==7685==    by 0xBEAD8617: ???
==7685==  If you believe this happened as a result of a stack
==7685==  overflow in your program's main thread (unlikely but
==7685==  possible), you can try to increase the size of the
==7685==  main thread stack using the --main-stacksize= flag.
==7685==  The main thread stack size used in this run was 8388608.
==7685==
==7685== HEAP SUMMARY:
==7685==     in use at exit: 7,671,140 bytes in 99,510 blocks
==7685==   total heap usage: 345,414 allocs, 245,904 frees, 38,473,207 bytes 
allocated
==7685==
==7685== LEAK SUMMARY:
==7685==    definitely lost: 49,171 bytes in 1,041 blocks
==7685==    indirectly lost: 457,010 bytes in 8,088 blocks
==7685==      possibly lost: 3,449,433 bytes in 46,039 blocks
==7685==    still reachable: 3,715,526 bytes in 44,342 blocks
==7685==                       of which reachable via heuristic:
==7685==                         newarray           : 69,036 bytes in 303 blocks
==7685==         suppressed: 0 bytes in 0 blocks
==7685== Rerun with --leak-check=full to see details of leaked memory
==7685==
==7685== For counts of detected and suppressed errors, rerun with: -v
==7685== Use --track-origins=yes to see where uninitialised values come from
==7685== ERROR SUMMARY: 4 errors from 3 contexts (suppressed: 0 from 0)

- (void)drawRect:(NSRect)rect
{
   NSLog(@"MapView drawRect %@ ... _osmDrawing %d", NSStringFromRect(rect), 
_osmDrawing);
   [super drawRect:rect];
   NSLog(@"After super drawRect:rect");
   [self bums];
   //   if (image != nil && _osmDrawing == NO)
     {
      NSImage *image = [self image];
      NSSize imageSize = [image size];
      
      _routeVisible = YES;    // <--- this is line 168
      // draw route
      NSLog(@"routeVisible: %d", _routeVisible);
      NSLog(@"routePath: %@", _routePath);
      ...
}

Thanks,

 Andreas

_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to