discuss-gnustep
[Top][All Lists]
Advanced

[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

Attachment: op-patch
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]