[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gworkspace / clang / libobjc2 hang problem
From: |
Riccardo Mottola |
Subject: |
gworkspace / clang / libobjc2 hang problem |
Date: |
Wed, 24 Dec 2014 23:21:01 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0 SeaMonkey/2.31 |
Hi,
I'm chasing a bug in GWorkspace which casues a hang when multiple file
operation happen.
Current GWorkspace works when a single operation is performed (e.g. just
copy a file) on:
1) Linux/gcc/gcc runtime
2) OpenBSD/gcc/gcc runtime
3) NetBSD/clang/libobjc2
After weeks of "chasing" I think I found the bug: A method in
Operation.m tries to determine the best position for the progress panel,
returning NSZeroRect if no other operaiton is running, a relative
position is one is running.
This method consistently returns an array out of bounds exception, being
written badly.
I rewrote the method with the attached patch, it is 99% equivalent and
should, at least, be equivalent in the case of NO other operation
running, that is returning NSZeroRect.
I attach the patch.
The patch seems to work with one or more operations on both gcc computers.
However on NetBSD with clang, on copy I get a hang even with at the
first copy operation! Why? nothing meaningful should change. Is my new
code buggy? Or does it trigger some runtime bug?
I tried to debug with gdb, but in that case I get a hang at a later
stage: instead of haning immediately when an operation should start, it
completes (panel comes up, progress, ends) and hangs later on
termination with this trace:
#1 0xbafe51e3 in write () from /usr/lib/libpthread.so.1
#2 0xbb30a8a2 in -[GSMessageHandle receivedEvent:type:extra:forMode:]
(self=0xb7ff9388,
_cmd=<optimized out>, data=<optimized out>, type=<optimized out>,
extra=0xd,
mode=<optimized out>) at NSMessagePort.m:951
#3 0xbb34c203 in -[GSRunLoopCtxt pollUntil:within:] (self=0xb8cff2e8,
_cmd=<optimized out>, milliseconds=Cannot access memory at address 0x0
) at GSRunLoopCtxt.m:598
#4 0xbb29c502 in -[NSRunLoop acceptInputForMode:beforeDate:]
(self=0xbb4b4960,
_cmd=<optimized out>, mode=<optimized out>, limit_date=<optimized out>)
at NSRunLoop.m:1219
#5 0xbb29ca49 in -[NSRunLoop runMode:beforeDate:] (self=0xb8af9828,
_cmd=<optimized out>, mode=<optimized out>, date=<optimized out>)
at NSRunLoop.m:1290
#6 0xbb30bdbc in -[GSMessageHandle sendMessage:beforeDate:]
(self=0xb7ff9388,
_cmd=<optimized out>, components=<optimized out>, when=<optimized out>)
at NSMessagePort.m:1034
#7 0xbb30e6a7 in -[NSMessagePort
sendBeforeDate:msgid:components:from:reserved:] (
self=<optimized out>, _cmd=0xbb4b1fa8, when=<optimized out>,
msgId=<optimized out>,
components=0xb7109368, receivingPort=<optimized out>,
length=<optimized out>)
at NSMessagePort.m:1966
#8 0xbb1f0f13 in -[NSConnection(Private) _sendOutRmc:type:]
(self=0xb7d86648,
_cmd=0xbb4b2008, c=0xb71431d8, msgid=7) at NSConnection.m:3448
#9 0xbb1f2f2d in -[NSConnection(Private) _release_target:count:]
(self=0xb7d86648,
_cmd=0xbb4b2010, target=1, number=1) at NSConnection.m:3666
#10 0xbb1f4ecd in -[NSConnection(Private) removeProxy:] (self=0xb7d86648,
_cmd=0xbb4b81e0, aProxy=0xb7dadb88) at NSConnection.m:3873
#11 0xbb21c3e1 in -[NSDistantObject(GNUstepExtensions) finalize]
(self=<optimized out>,
_cmd=0xbb4b8220) at NSDistantObject.m:846
#12 0xbb21b515 in -[NSDistantObject dealloc] (self=0xb7dadb88,
_cmd=0xb7dadb88)
at NSDistantObject.m:465
#13 0xbb29825d in -[NSProxy release] (self=0xb7dadb88, _cmd=0x811c2d0)
at NSProxy.m:464
#14 0x0808071a in -[GWorkspace applicationShouldTerminate:]
(self=0x811c690,
_cmd=0xbb9b4218, app=0xb8c0bc58) at GWorkspace.m:645
#15 0xbb70bc64 in -[NSApplication terminate:] (self=0xb8c0bc58,
_cmd=0x811c4b8,
sender=0xb7fc3e28) at NSApplication.m:3462
#16 0xbb709603 in -[NSApplication sendAction:to:from:] (self=0xb8c0bc58,
_cmd=0xbb9ecb38,
aSelector=0x811c4b8, aTarget=0x0, sender=<optimized out>) at
NSApplication.m:2230
#17 0xbb7b83a5 in -[NSMenu performActionForItemAtIndex:] (self=0xb8c0bc58,
_cmd=0xbb9ee308, index=<optimized out>) at NSMenu.m:1331
#18 0xbb7c00a0 in -[NSMenuView _trackWithEvent:startingMenuView:]
(self=0xb8aeba08,
_cmd=0x0, event=<optimized out>, mainWindowMenuView=<optimized out>)
at NSMenuView.m:1916
#19 0xbb7c0386 in -[NSMenuView trackWithEvent:] (self=0xb8aeba08,
_cmd=0xbb9ee4c8,
event=<optimized out>) at NSMenuView.m:1948
#20 0xbb7c0500 in -[NSMenuView mouseDown:] (self=0xb8aeba08,
_cmd=0x3fb99999,
theEvent=<optimized out>) at NSMenuView.m:1988
#21 0xbb882081 in -[NSWindow sendEvent:] (self=<optimized out>,
_cmd=0x41e00000,
theEvent=<optimized out>) at NSWindow.m:3898
#22 0xbb709216 in -[NSApplication sendEvent:] (self=<optimized out>,
_cmd=0xbb9b4358,
theEvent=<optimized out>) at NSApplication.m:2107
#23 0xbb708187 in -[NSApplication run] (self=<optimized out>,
_cmd=0x81160b8)
at NSApplication.m:1562
#24 0x0807b234 in gnustep_base_user_main (argc=1, argv=0xbfbfe8b4,
env=0xbfbfe8bc)
at main.m:38
#25 0x0807b095 in ___start ()
#26 0x0807af68 in _start ()
Any ideas?? I'm really puzzled!
Riccardo
op-patch
Description: Text document
- gworkspace / clang / libobjc2 hang problem,
Riccardo Mottola <=
- Re: gworkspace / clang / libobjc2 hang problem, Riccardo Mottola, 2014/12/25
- Re: gworkspace / clang / libobjc2 hang problem, David Chisnall, 2014/12/25
- Re: gworkspace / clang / libobjc2 hang problem, Riccardo Mottola, 2014/12/25
- Re: gworkspace / clang / libobjc2 hang problem, Richard Frith-Macdonald, 2014/12/26
- Re: gworkspace / clang / libobjc2 hang problem, David Chisnall, 2014/12/26
- Re: gworkspace / clang / libobjc2 hang problem, Riccardo Mottola, 2014/12/26
- Re: gworkspace / clang / libobjc2 hang problem, Riccardo Mottola, 2014/12/28