← Back to team overview

kicad-developers team mailing list archive

Re: pcbnew hang

 

On 6/16/2013 12:44 PM, Chris Morgan wrote:
> Hi Wayne.
> 
> 
> I think the difference may be due to where the app was started. It's
> the same build with debug enabled and installed from the kicad testing
> repository. The actual directories are odd though, they are off of a
> backed up root install from another server and are symlinks that
> aren't present in the directory. They are in the backed up directories
> udev/devices/fd/ folder but they appear to be created as a product of
> the app running I guess or else I'm missing something.
> 
> Chris

Chris,

When you run Pcbnew from the command line, do you see a bunch wxLog
messages with system errors?  There is some system error logging that
can occur in the one of the private objects wxDir uses.  I'm not sure a
broken symlink will trip the system error in question.  If you are
seeing log messages, that may be why Pcbnew is hanging and not the bad
symlinks.  There is a known bug with debug builds on Linux that will
cause an application to hang when dumping output to the stdout when
using KiCad to launch the application.

Wayne

> 
> 
> 
> On Jun 16, 2013, at 11:25 AM, Wayne Stambaugh <stambaughw@xxxxxxxxxxx> wrote:
> 
>> On 6/15/2013 8:12 PM, Chris Morgan wrote:
>>> Dick turned out to be correct, that was some good insight there.
>>>
>>> Attached strace to the process and sure enough it is traversing a
>>> directory that has symlinks, several of which appear to be pointing back
>>> to the same directory. So, the process is making progress but because of
>>> the several symlink loops its taking a long long time to complete.
>>>
>>> It looks like if we used
>>> http://docs.wxwidgets.org/trunk/dir_8h.html#aa45988fae9ce0d0c4f8312a6cf026232a25c09a8059a40281ca2d7919d84b4941 instead
>>> of wxDir then we would be able to disable symlink traversal.
>>>
>>> Chris
>>>
>>>
>>>
>>>
>>> On Sat, Jun 15, 2013 at 5:46 PM, Chris Morgan <chmorgan@xxxxxxxxx
>>> <mailto:chmorgan@xxxxxxxxx>> wrote:
>>>
>>>    Ok. Ill see what I can come up with. Good idea on the recursive
>>>    symlink. Surprised wx wouldn't handle that situation.
>>>
>>>    Ill try to figure it out this evening.
>>>
>>>    Chris
>>
>> Chris,
>>
>> When you get time, please try changing:
>>
>> unsigned cnt = wxDir::GetAllFiles( GetLibraryPathList()[i], &tmp, wxT( "*.mod" ) );
>>
>> to:
>>
>> unsigned cnt = wxDir::GetAllFiles( GetLibraryPathList()[i], &tmp, wxT( "*.mod" ), wxDIR_DEFAULT | wxDIR_NO_FOLLOW );
>>
>> and see if that resolves the problem.  It's seems odd to me that it works correctly when Pcbnew is run directly from the command line but fails when Pcbnew is launched from KiCad.  Are you using a debug build?  It may be possible that wxWidgets is trying log something to stdout and that is what is actually causing it hang.
>>
>> I wont be able to look at this until sometime tonight or tomorrow.  I plan on enjoying the rest of Fathers Day with the family.  Good catch and thanks for the help.
>>
>> Happy Father's Day to all of you fathers out there.
>>
>> Wayne
>>
>>
>>>
>>>
>>>
>>>    On Jun 15, 2013, at 5:31 PM, Dick Hollenbeck <dick@xxxxxxxxxxx
>>>    <mailto:dick@xxxxxxxxxxx>> wrote:
>>>
>>>     > No idea.  This is new code.
>>>     >
>>>     > KISYSMOD env var is not used yet, so one option is to comment out
>>>    the entire block from
>>>     > 194 to 213.
>>>     >
>>>     > But I think Wayne would appreciate getting help nailing the
>>>    problem.  You can try and log
>>>     > the execution with fprintf().  Using printf() likely won't work,
>>>    since the output as a
>>>     > child process is directed into parent process "kicad".
>>>     >
>>>     > So fprintf() is a good quick test.  Write GetCount() at the top,
>>>    then each iteration and
>>>     > the path that you are going into.  I think will be informative.
>>>      gdb is probably not up to
>>>     > that task.
>>>     >
>>>     > Then simply do bzr revert pcbnew/pcbnew.cpp when you are done.
>>>     >
>>>     > You might have a circular set of symlinks, who knows.  the log
>>>    file you create will tell.
>>>     >
>>>     >
>>>     >
>>>     >
>>>     >
>>>     >
>>>     > _______________________________________________
>>>     > Mailing list: https://launchpad.net/~kicad-developers
>>>     > Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>    <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>>     > Unsubscribe : https://launchpad.net/~kicad-developers
>>>     > More help   : https://help.launchpad.net/ListHelp
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~kicad-developers
>>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>> More help   : https://help.launchpad.net/ListHelp
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~kicad-developers
>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~kicad-developers
>> More help   : https://help.launchpad.net/ListHelp
> 



References