Yade crashes at "show 3D" in Ubuntu 20.04

Asked by Jiannan Wang on 2020-10-04

Hello,

I updated my ubuntu to 20.04. Yade can run fine except it crashes everything I open "Show 3D" in the controller. The only message shown in the terminal is Segmentation fault (core dumped). Any idea what went wrong? Thanks.

Best
Jiannan

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jiannan Wang
Solved:
2020-10-15
Last query:
2020-10-15
Last reply:
2020-10-06
Janek Kozicki (cosurgi) said : #1

hm, ubuntu 20.04 is well supported and should work. We need a bit more info, can you provide the output of commad printAllVersions() from terminal?

Also, you might want to try yadedaily: https://yade-dem.org/doc/installation.html#packages

Jiannan Wang (jnwang) said : #2

Hello Janek,

Thank you for replying so fast. I was using yadedaily. Here is the output of printAllVersions():

```
Yade version : 20201002-4236~57d1c9c~focal1
Yade features : BoostLog RealHP mpmath PrecisionDouble Odeint VTK OpenMP GTS GUI-Qt5 CGAL PFVFLOW PFVFLOW LINSOLV MPI TWOPHASEFLOW FEMLIKE GL2PS LBMFLOW THERMAL PotentialParticles PotentialBlocks
Yade config dir: ~/.yadedaily
Yade precision : 53 bits, 15 decimal places, with mpmath
Yade RealHP<…> : (15, 33, 45, 60, 120, 150, 300) decimal digits in C++, (15, 33) decimal digits accessible from python
```

Libraries used :

| library | cmake | C++ |
| ------------- | -------------------- | ------------------ |
| boost | 1.71.0 | 1.71.0 |
| cgal | | 5.0.2 |
| clp | 1.17.5 | 1.17.5 |
| cmake | 3.16.3 | |
| coinutils | 2.11.4 | 2.11.4 |
| compiler | /usr/bin/c++ 9.3.0 | gcc 9.3.0 |
| eigen | 3.3.7 | 3.3.7 |
| freeglut | 2.8.1 | |
| gl | | 20190805 |
| ipython | 7.13.0 | |
| metis | | 5.1.0 |
| mpi | 3.1 | ompi:4.0.3 |
| mpi4py | 3.0.3 | |
| mpmath | 1.1.0 | |
| openblas | | OpenBLAS 0.3.8 |
| python | 3.8.2 | 3.8.2 |
| qglviewer | | 2.6.3 |
| qt | | 5.12.8 |
| sphinx | 1.8.5-final-0 | |
| sqlite | | 3.31.1 |
| suitesparse | 5.7.1 | 5.7.1 |
| vtk | 6.3.0 | 6.3.0 |

Linux version: Ubuntu 20.04.1 LTS

#############################

Thank you.

Best regards
Jiannan

Janek Kozicki (cosurgi) said : #3

All the package versions used by yade have exactly the same version number in ubuntu 20.04 and 20.04.1, from yade perspective your system did not change. Also I upgraded my chroot from 20.04 to 20.04.1 to make extra tests. I could not reproduce your problem. Can you check if all other programs work correctly for you? Maybe something else is broken.

Try running with command line argument -f6

yade -f6

What messages in the terminal do you get upon crash?

Jiannan Wang (jnwang) said : #4

Hello Janek,

For me, the crash only happen when I open and then close the 3D view from the controller. Otherwise the simulation itself is fine.

I tried to open the controller without actual running anything. I just copy and past everything from the terminal to here just in case:

Welcome to Yade 2020.01a
Using python version: 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0]
LOGGER Warning: setting "Default" log level higher than MAX_LOG_LEVEL=5 will have no effect. Logs will not be printed, they were removed during compilation.
LOGGER Warning: to be able to use "Default"=6 you have to recompile yade with cmake option MAX_LOG_LEVEL=6 or higher.
<INFO> _log.cpp:49 void yade::setLevel(std::string, int): filter log level for Default has been set to 6
<INFO> Logging:187 void Logging::setNamedLogLevel(const string&, short int): setting "Default" log level to 6
LOGGER Warning: setting "Default" log level higher than MAX_LOG_LEVEL=5 will have no effect. Logs will not be printed, they were removed during compilation.
LOGGER Warning: to be able to use "Default"=6 you have to recompile yade with cmake option MAX_LOG_LEVEL=6 or higher.
<INFO> _log.cpp:49 void yade::setLevel(std::string, int): filter log level for Default has been set to 6
TCP python prompt on localhost:9000, auth cookie `csdkyu'
XMLRPC info provider on http://localhost:21000
<DEBUG> OpenGLRenderer:68 void yade::OpenGLRenderer::initgl(): (re)initializing GL for gldraw methods.
[[ ^L clears screen, ^U kills line. F12 controller, F11 3D view (press "h" in 3D view for help), F10 both, F9 generator, F8 plot. ]]

In [1]: yade.qt.Controller()

In [2]: <INFO> GLViewer:351 void yade::GLViewer::centerScene(): Select with shift, press 'm' to move.
<DEBUG> GLViewer:360 void yade::GLViewer::centerScene(): scene's bound not yet calculated or has zero or nan dimension(s), attempt get that from bodies' positions.
<DEBUG> GLViewer:368 void yade::GLViewer::centerScene(): No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)
<DEBUG> GLViewer:371 void yade::GLViewer::centerScene(): Got scene box min=-1
-1
-1 and max=1
1
1
<DEBUG> GLViewer:375 void yade::GLViewer::centerScene(): Scene center=0
0
0, halfSize=1
1
1, radius=1
<INFO> GLViewer:351 void yade::GLViewer::centerScene(): Select with shift, press 'm' to move.
<DEBUG> GLViewer:360 void yade::GLViewer::centerScene(): scene's bound not yet calculated or has zero or nan dimension(s), attempt get that from bodies' positions.
<DEBUG> GLViewer:368 void yade::GLViewer::centerScene(): No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)
<DEBUG> GLViewer:371 void yade::GLViewer::centerScene(): Got scene box min=-1
-1
-1 and max=1
1
1
<DEBUG> GLViewer:375 void yade::GLViewer::centerScene(): Scene center=0
0
0, halfSize=1
1
1, radius=1

#########################################

The crash happened when I closed the "Show 3D" window. Here is the message from the terminal:

<DEBUG> GLViewer:50 virtual void yade::GLViewer::closeEvent(QCloseEvent*): Will emit closeView for view #0
<DEBUG> OpenGLManager:52 virtual void yade::OpenGLManager::closeViewSlot(int): Closing primary view.
Segmentation fault (core dumped)

###############

Thank you.

Best regards
Jiannan

Janek Kozicki (cosurgi) said : #5

Thank you, the old bug is back. I now managed to reproduce it. It is rare on my side unfortunately.

https://gitlab.com/yade-dev/trunk/-/merge_requests/437

we will get to it.

Janek Kozicki (cosurgi) said : #7

There is still something strange in your report.

1. You are running "Yade version : 20201002-4236~57d1c9c~focal1" which is commit hash 57d1c9c which is latest master.
2. crash occurs in line 50 of GLViewer.cpp and line 52 of OpenGLManager.cpp

BUT, these messages are printed:
1. in line 53 : https://gitlab.com/yade-dev/trunk/-/blob/master/gui/qt5/GLViewer.cpp#L53
2. and in line 76: https://gitlab.com/yade-dev/trunk/-/blob/master/gui/qt5/OpenGLManager.cpp#L76

And also, the message in your line 50 is very different. Latest yade cannot possibly generate such message. Because your message originates from function named yade::GLViewer::closeEvent, but this function actually, in commit 57d1c9c has name yade::GLViewer::staticCloseEvent. So you are running yade version older or equal to git commit 73432b7 : https://gitlab.com/yade-dev/trunk/-/blob/73432b7a9/gui/qt5/GLViewer.cpp#L50 and indeed in this old yade version the other line number of your messages matches your report: https://gitlab.com/yade-dev/trunk/-/blob/73432b7a9/gui/qt5/OpenGLManager.cpp#L52

which is 8 months old. I don't know how you could have possibly mixed two yade versions.

Jiannan Wang (jnwang) said : #8

Hello Janek,

Thank you for replying so fast.

I don't know why I could have a message from 8 months old version since I only start to use Yade on this desktop (run Parallel on Mac) from mid September ... I updated yadedaily after I update to ubuntu 20.04 from 18.04. For me, the crash only occurs in 20.04. Is there anything I can do to find out where may go wrong? Thank you.

Best regards
Jiannan

Janek Kozicki (cosurgi) said : #9

First find all files _GLViewer.so with this command:

find / -iname "_GLViewer.so*" 2> /dev/null

there should be some of such files. They should be inside directory names from which you could probably deduce the yade version to which they belong.

Then try uninstalling all versions of yade using your package manager. Then, these files should disappear. You can verify by running this command again.

If these files have disappeared, then you are safe to install yade again.

If they did not disappear, then what is left is the cause of your trouble. Maybe a leftover from some interrupted installation? Most likely you are safe to delete not only this file, but the accompanying parent directory. But better if you investigate yourself and make backup copies to not lose any of your data.

Janek Kozicki (cosurgi) said : #10

Also, before deleting them. you can get the name of the package responsible for the files that seem unaccounted for. Use command:

dpkg -S filename

where 'filename' is the name of the file that you wish to know which package is responsible for this file. In fact you could try that command even before uninstalling any package with your package manager. Just to see how it works.

Janek Kozicki (cosurgi) said : #11

Also it is much better to uninstall the package via package manager than to delete the directory manually (manual intervention is only necessary when there is no package owning this file, which can only be a result of some crash, e.g. a power failure).

So if `dpkg -S` told you the name of package responsible for this file, then it is better to uninstall it via package manager.

Of course I mean uninstalling yade and yadedaily packages and various variations of their versions that you somehow have installed :) Then you can reinstall yadedaily again, and it should be fixed :)

Jiannan Wang (jnwang) said : #12

Hello Janek,

Thank you again for the interaction. I tried to use find / -iname "_GLViewer.so*" 2> /dev/null, but nothing came back from the terminal.

Also, I tried reinstalling the 20.04 and fresh installing Yade and yadedaily altogether. But it still crashes when I close the 3D view. Anything else I could do?

Best regards
Jiannan

Janek Kozicki (cosurgi) said : #13

Hmm. Maybe default ubuntu terminal has different handling of output streams. Does:

find /usr -iname "_GLViewer.so*"

return nothing also? (but it might print a lot of "Permission denied" which are useless and were removed by that `2> /dev/null` at the end of previous command).

Well, I reproduced that crash, so even if you managed to run yadedaily, it would still crash :) I opened an issue to fix it: https://gitlab.com/yade-dev/trunk/-/issues/164

We can verify by looking at crash output when you start `yade -f6` whether you have indeed latest yade version running. You should have something like this:

<DEBUG> GLViewer:53 static void yade::GLViewer::staticCloseEvent(QCloseEvent*, int): Accept this event: Will emit closeView for view #0
<DEBUG> OpenGLManager:76 virtual void yade::OpenGLManager::closeViewSlot(int): Closing primary view.

Another thing: maybe you installed yadedaily, but not libyadedaily ? (it shouldn't be possible to install yadedaily without libyadedaily, because of library dependencies). Also you might try removing yade package, and install only yadedaily (which is a bit strange solution, because the two versions are supposed to not interfere with each other, but we are running out of options).

Janek Kozicki (cosurgi) said : #14

Oh, wait. You should be invoking `yadedaily -f6`. Sorry, I forgot that yade exacutable from yadedaily package is called yadedaily ! :) Perhaps all my other comments are irrelevant in light of this mistake ;)

Jiannan Wang (jnwang) said : #15

Hello Janek,

Thank you so much for troubleshooting for me step by step. I used yadedaily -f6, and there is the output:

Welcome to Yade 20201004-4238~57d1c9c~focal1
Using python version: 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0]
LOGGER Warning: setting "Default" log level higher than MAX_LOG_LEVEL=5 will have no effect. Logs will not be printed, they were removed during compilation.
LOGGER Warning: to be able to use "Default"=6 you have to recompile yade with cmake option MAX_LOG_LEVEL=6 or higher.
<INFO> _log.cpp:49 void yade::setLevel(std::string, int): filter log level for Default has been set to 6
<INFO> Logging:189 void Logging::setNamedLogLevel(const string&, short int): setting "Default" log level to 6
LOGGER Warning: setting "Default" log level higher than MAX_LOG_LEVEL=5 will have no effect. Logs will not be printed, they were removed during compilation.
LOGGER Warning: to be able to use "Default"=6 you have to recompile yade with cmake option MAX_LOG_LEVEL=6 or higher.
<INFO> _log.cpp:49 void yade::setLevel(std::string, int): filter log level for Default has been set to 6
TCP python prompt on localhost:9000, auth cookie `acyduk'
XMLRPC info provider on http://localhost:21000
<DEBUG> OpenGLRenderer:84 void yade::OpenGLRenderer::initgl(): (re)initializing GL for gldraw methods.
[[ ^L clears screen, ^U kills line. F12 controller, F11 3D view (press "h" in 3D view for help), F10 both, F9 generator, F8 plot. ]]

In [1]: yade.qt.Controller()

In [2]: <INFO> GLViewer:523 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): Select with shift, press 'm' to move.
<DEBUG> GLViewer:535 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): scene's bound not yet calculated or has zero or nan dimension(s), attempt get that from bodies' positions.
<DEBUG> GLViewer:551 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)
<DEBUG> GLViewer:559 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): Got scene box min=-1 -1 -1 and max=1 1 1
<DEBUG> GLViewer:563 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): Scene center=0 0 0, halfSize=1 1 1, radius=1, suggestedRadius=-1
<INFO> GLViewer:523 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): Select with shift, press 'm' to move.
<DEBUG> GLViewer:535 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): scene's bound not yet calculated or has zero or nan dimension(s), attempt get that from bodies' positions.
<DEBUG> GLViewer:551 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)
<DEBUG> GLViewer:559 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): Got scene box min=-1 -1 -1 and max=1 1 1
<DEBUG> GLViewer:563 void yade::GLViewer::centerScene(const Real&, const Vector3r&, const Vector3r&, int): Scene center=0 0 0, halfSize=1 1 1, radius=1, suggestedRadius=-1

############## The following is the terminal output when I closed the 3D view and crashed. ############

<DEBUG> GLViewer:53 static void yade::GLViewer::staticCloseEvent(QCloseEvent*, int): Accept this event: Will emit closeView for view #0
<DEBUG> GLViewer:55 static void yade::GLViewer::staticCloseEvent(QCloseEvent*, int): Call OpenGLManager::self->emitCloseView for view #0
<DEBUG> OpenGLManager:76 virtual void yade::OpenGLManager::closeViewSlot(int): Closing primary view.
<DEBUG> OpenGLManager:78 virtual void yade::OpenGLManager::closeViewSlot(int): The currently closed view will be destroyed later. (QWindow insists on accessing the about to be destroyed instance)
<DEBUG> GLViewer:59 static void yade::GLViewer::staticCloseEvent(QCloseEvent*, int): Finished OpenGLManager::self->emitCloseView for view #0
<DEBUG> OpenGLManager:41 virtual void yade::OpenGLManager::cleanupViewsSlot(): mutex locked, now calling: if(not viewsLater.empty()) { ... }
<DEBUG> GLViewer:44 virtual yade::GLViewer::~GLViewer(): Closing 0
Segmentation fault (core dumped)

Let me know.

Best regards
Jiannan

Janek Kozicki (cosurgi) said : #16

Thank you. Exactly this debug log I was expecting.

So now you have confirmed the bug [1]. Until we fix it, this will unfortunately crash. I'm sorry about that. We will let you know when it's fixed so that you can try a new version :)

So the explanation of my puzzle was that the "mixing" of yade versions was only the incorrect invocation yade vs. yadedaily. So everything is clear now :)

[1] https://gitlab.com/yade-dev/trunk/-/issues/164

Janek Kozicki (cosurgi) said : #17

Hi, there are two ways to close this 3D view window:

1. click the "x" button on the 3D view window frame.
2. click the 'Show 3D' button in the yade Controller window.

Which of these two ways crash for you?

Jiannan Wang (jnwang) said : #18

Hello Janek,

Sorry about the late reply. The crash only happens when I click the "X" bottom. Clicking the 'Show 3D' button seems fine, didn't realized that. Thank you for the nice hint!

I'm not sure about what is the appropriate protocol: should I leave this thread open or close it?

Best regards
Jiannan

Janek Kozicki (cosurgi) said : #19

We can wait with closing this. I have a proposed fix for this [1]. We only need to wait until it gets merged into master, and the next day it will be in yadedaily. If you feel adventurous, know git a little, and don't want to wait until this fix will be in yadedaily, you could try to compile yade from branch fix164 to test this [2]

[1] https://gitlab.com/yade-dev/trunk/-/merge_requests/527
[2] https://yade-dem.org/doc/installation.html#compilation

Janek Kozicki (cosurgi) said : #20

The fix just got merged to master. Tomorrow you should be able to check if it's fixed in latest yadedaily.

Jiannan Wang (jnwang) said : #21

Hello Janek,

Thank you so much for all these efforts. I'm very much looking forward the new update.

Best regards
Jiannan

Jiannan Wang (jnwang) said : #22

Hello Janek,

Sorry for the late response. I just update the yadedaily. It's working great. Thank you so much for the swift patch.

Best
Jiannan

Janek Kozicki (cosurgi) said : #23

you are welcome :)