For reference, I've created another test which uses many more GUI
elements and which causes a segmentation fault on Mac systems after
less than 300 iterations:

$ ./relax devel_scripts/memory_management/GUI_uf_align_tensor_init.py

This script works flawlessly on Linux and Windows systems.

Regards,

Edward



On 17 March 2015 at 11:54, Edward d'Auvergne <edw...@nmr-relax.com> wrote:
> Hi,
>
> Here is a good example of where the Mac GUI limits can be tested:
>
> $ ./relax devel_scripts/memory_management/GUI_uf_time.py
>
> This repetitively calls the time user function 10000 times.  This uses
> the muppy module from the powerful Pympler package
> (https://pythonhosted.org/Pympler/).  Looking at the 'muppy_log' file
> produced, it can be seen that no extra memory is being leaked.  I.e.
> all the GUI objects are released.  The memory between iteration 100
> and the last iteration is the same (except for some extra Python
> objects after iteration 1700 when the first invisible problems
> probably occur).  The way the time user function is called is that the
> user function window is created and then destroyed each time.  No
> wxPython objects are present in memory after the user function is
> destroyed.  This is different to the GUI behaviour where the window is
> created and then closed by being hidden, and a second call simply
> reopens the original window.  However this test demonstrates the Mac
> GUI object failure point extremely clearly.
>
> This executes perfectly fine on Linux and Windows systems.  However on
> Mac systems, the memory errors will eventually appear, and finally
> relax will crash.  However nothing will be seen in the muppy log file.
> So there is nothing in Python memory which is causing this.  Rather
> the Mac system will not release the GUI objects.  I would love to know
> how to whack the Mac system over the head to release these things!
> Maybe there is a workaround in wxPython for this.  Or maybe it is a
> wxWidgets bug that will be fixed in the future.  In any case, I am
> completely lost as to how to handle this Python-wxPython-wxWidgets-Mac
> OS X bug.  If this simple script could be made to work, then many Mac
> GUI issues will simply disappear.
>
> Regards,
>
> Edward
>
>
>
> On 17 March 2015 at 10:40, Edward d'Auvergne <edw...@nmr-relax.com> wrote:
>> Hi,
>>
>> Would anyone know of any tools in Mac OS X which can be used to track
>> GUI object usage?  In MS Windows, the task manager can be set up to
>> display "USER Objects" and "GUI Objects".  I have used this for
>> debugging to allow the GUI tests to pass again on that system and not
>> run into the 10,000 object limits.  But in Mac and Linux systems, I
>> have no idea what can be used for a GUI debugging tool!  If I could
>> see these and have an idea about their usage, I might be able to track
>> down possible GUI object leaks and maybe get the tests to run again.
>> It might be possible to save memory in other areas, or to even force
>> Macs to release the GUI objects.  But we are currently completely
>> blind as to what is happening with wxPython, GUI objects, and the Mac
>> way of handling these.
>>
>> Cheers,
>>
>> Edward
>>
>>
>>
>>
>> On 15 March 2015 at 14:11, Edward d'Auvergne <edw...@nmr-relax.com> wrote:
>>> Hi,
>>>
>>> The error I see is:
>>>
>>> """
>>> $ ./relax --gui-tests
>>>
>>>
>>> =============
>>> = GUI tests =
>>> =============
>>>
>>> .........................................Sun Mar 15 13:53:41 Mac.local
>>> Python[248] <Error>: kCGErrorFailure: _CGSBindWindowBacking: cannot
>>> map backing data shmem
>>> Sun Mar 15 13:53:41 Mac.local Python[248] <Error>: kCGErrorFailure:
>>> Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are
>>> logged.
>>> Sun Mar 15 13:53:41 Mac.local Python[248] <Error>: kCGErrorFailure:
>>> _CGSLockWindow: Unable to lock window
>>> Sun Mar 15 13:53:41 Mac.local Python[248] <Error>: kCGErrorFailure:
>>> _CGSBindWindowBacking: cannot map backing data shmem
>>> Sun Mar 15 13:53:41 Mac.local Python[248] <Error>: kCGErrorFailure:
>>> _CGSLockWindow: Unable to lock window
>>> Sun Mar 15 13:53:41 Mac.local Python[248] <Error>: kCGErrorFailure:
>>> _CGSBindWindowBacking: cannot map backing data shmem
>>> Sun Mar 15 13:53:41 Mac.local Python[248] <Error>: kCGErrorFailure:
>>> _CGSLockWindow: Unable to lock window
>>> """
>>>
>>>
>>> This is repeated many, many times until I see:
>>>
>>> """
>>> Python(248,0x3bd540) malloc: *** mmap(size=2097152) failed (error code=12)
>>> *** error: can't allocate region
>>> *** set a breakpoint in malloc_error_break to debug
>>> """
>>>
>>> This too is repeated many, many times.  Then the memory runs out and
>>> "Segmentation fault" is printed and a window pops up saying that
>>> Python died unexpectedly.
>>>
>>> Regards,
>>>
>>> Edward
>>>
>>> On 15 March 2015 at 13:48, Edward d'Auvergne <edw...@nmr-relax.com> wrote:
>>>> Hi Jack,
>>>>
>>>> Maybe you might be able to help solve this problem.  It is rather
>>>> difficult and I think the easiest solution is to blacklist GUI tests
>>>> from running on Mac OS X.  However despite the segfaults, I find the
>>>> tests useful to make sure all is well in the GUI on a Mac.  The
>>>> problem is either a bug in wxPython, well really wxWidgets, or a
>>>> design flaw in Mac OS X.  From what I've read, it sounds more like a
>>>> Mac design flaw.
>>>>
>>>> This was previously a problem on MS Windows, but I have solved it for
>>>> that OS in relax 3.3.6 (http://wiki.nmr-relax.com/Relax_3.3.6).  All
>>>> operating systems have a hard limit for the number of GUI objects that
>>>> can be created (windows, panels, buttons, etc.).  In MS Windows, this
>>>> is called "User Objects" and there the limit is 10,000, and "GDI
>>>> Object" which has the same limit.  In Mac systems, I'm not sure what
>>>> the equivalent are called.  In Linux, the limits are so high that
>>>> we'll never encountered the problem.  In relax these limits are
>>>> reached due to the design of the GUI, specifically the user function
>>>> windows.  If all the user function windows are open simultaneously,
>>>> then the Windows and Mac limits are reached and Python errors or
>>>> segfaults are seen respectively.  The current design is that after
>>>> closing a user function window, it remains in memory so that when you
>>>> reopen it, all its settings and values from the previous execution are
>>>> still there.  This is very useful for repetitive operations such as
>>>> loading peak list data.  But when running the test suite, as the user
>>>> function windows remain permanently open, the hard GUI limits are
>>>> reached in both Windows and Macs.  This problem has only recently
>>>> surfaced as the number of GUI tests have expanded and more of the user
>>>> functions are executed.  In the future as the GUI tests expand even
>>>> more, this will become more and more of a problem.
>>>>
>>>> The solution in relax 3.3.6 was to destroy all user function windows
>>>> at the end of each GUI test (see
>>>> http://www.nmr-relax.com/api/3.3/test_suite.gui_tests.base_classes-pysrc.html#GuiTestCase.tearDown
>>>> and 
>>>> http://www.nmr-relax.com/api/3.3/gui.spin_viewer.frame-pysrc.html#Spin_view_window.Destroy
>>>> for this design).  This frees the User Objects and GDI Objects in MS
>>>> Windows.  However this is were the Mac OS X design flaw hurts.  In the
>>>> Mac, the system will not release the GUI objects until the program
>>>> terminates!  So despite the window Destroy() function calls, the limit
>>>> will be reached and a segfault will occur.  I have desperately
>>>> searched for a solution for this for Mac systems, but have found none.
>>>> It sounds like the wxWidget people blame the Mac OS design flaw.
>>>> Maybe in the future, wxWidgets will find a workaround that can then be
>>>> used in relax.  But until then, we are pretty much bound to have
>>>> segfaults in Mac systems in the GUI tests.  I really have not idea
>>>> what we can do to solve this issue!
>>>>
>>>> Regards,
>>>>
>>>> Edward
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 14 March 2015 at 22:35, Jack Howarth
>>>> <no-reply.invalid-addr...@gna.org> wrote:
>>>>> Follow-up Comment #1, bug #23389 (project relax):
>>>>>
>>>>> This failure also appears in 3.3.6 with 'relax --test-suite'. Oddly it 
>>>>> doesn't
>>>>> occur with 'relax --gui-tests'.
>>>>>
>>>>>     _______________________________________________________
>>>>>
>>>>> Reply to this item at:
>>>>>
>>>>>   <http://gna.org/bugs/?23389>
>>>>>
>>>>> _______________________________________________
>>>>>   Message sent via/by Gna!
>>>>>   http://gna.org/
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> relax (http://www.nmr-relax.com)
>>>>>
>>>>> This is the relax-devel mailing list
>>>>> relax-devel@gna.org
>>>>>
>>>>> To unsubscribe from this list, get a password
>>>>> reminder, or change your subscription options,
>>>>> visit the list information page at
>>>>> https://mail.gna.org/listinfo/relax-devel

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
relax-devel@gna.org

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to