Opened 5 years ago
Last modified 3 years ago
#3761 reopened defect
Warning when quitting about WebEnginePage profile released too soon
Reported by: | Owned by: | Zach Pearson | |
---|---|---|---|
Priority: | high | Milestone: | |
Component: | UI | Version: | |
Keywords: | Cc: | chimerax-programmers | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: macOS-10.15.6-x86_64-i386-64bit ChimeraX Version: 1.2.dev202009250242 (2020-09-25 02:42:18 UTC) Description On exit ChimeraX issues 3 copies of this warning to the shell: WARNING: Release of profile requested but WebEnginePage still not deleted. Expect troubles ! Log: UCSF ChimeraX version: 1.2.dev202009250242 (2020-09-25) © 2016-2020 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX OpenGL version: 4.1 ATI-3.10.16 OpenGL renderer: AMD Radeon Pro Vega 20 OpenGL Engine OpenGL vendor: ATI Technologies Inc.Hardware: Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro15,3 Processor Name: 8-Core Intel Core i9 Processor Speed: 2.4 GHz Number of Processors: 1 Total Number of Cores: 8 L2 Cache (per Core): 256 KB L3 Cache: 16 MB Hyper-Threading Technology: Enabled Memory: 32 GB Boot ROM Version: 1037.147.4.0.0 (iBridge: 17.16.16610.0.0,0) Software: System Software Overview: System Version: macOS 10.15.6 (19G2021) Kernel Version: Darwin 19.6.0 Time since boot: 30 days 17:23 Graphics/Displays: Intel UHD Graphics 630: Chipset Model: Intel UHD Graphics 630 Type: GPU Bus: Built-In VRAM (Dynamic, Max): 1536 MB Vendor: Intel Device ID: 0x3e9b Revision ID: 0x0002 Automatic Graphics Switching: Supported gMux Version: 5.0.0 Metal: Supported, feature set macOS GPUFamily2 v1 Radeon Pro Vega 20: Chipset Model: Radeon Pro Vega 20 Type: GPU Bus: PCIe PCIe Lane Width: x8 VRAM (Total): 4 GB Vendor: AMD (0x1002) Device ID: 0x69af Revision ID: 0x00c0 ROM Revision: 113-D2060I-087 VBIOS Version: 113-D20601MA0T-016 Option ROM Version: 113-D20601MA0T-016 EFI Driver Version: 01.01.087 Automatic Graphics Switching: Supported gMux Version: 5.0.0 Metal: Supported, feature set macOS GPUFamily2 v1 Displays: Color LCD: Display Type: Built-In Retina LCD Resolution: 2880 x 1800 Retina Framebuffer Depth: 24-Bit Color (ARGB8888) Main Display: Yes Mirror: Off Online: Yes Automatically Adjust Brightness: No Connection Type: Internal PyQt version: 5.15.1 Compiled Qt version: 5.15.1 Runtime Qt version: 5.15.1 Installed Packages: alabaster: 0.7.12 appdirs: 1.4.4 appnope: 0.1.0 Babel: 2.8.0 backcall: 0.2.0 blockdiag: 2.0.1 certifi: 2020.6.20 cftime: 1.2.1 chardet: 3.0.4 ChimeraX-AddH: 2.1.1 ChimeraX-AlignmentAlgorithms: 2.0 ChimeraX-AlignmentHdrs: 3.2 ChimeraX-AlignmentMatrices: 2.0 ChimeraX-Alignments: 2.1 ChimeraX-Arrays: 1.0 ChimeraX-Atomic: 1.8.2 ChimeraX-AtomicLibrary: 1.0 ChimeraX-AtomSearch: 2.0 ChimeraX-AtomSearchLibrary: 1.0 ChimeraX-AxesPlanes: 2.0 ChimeraX-BasicActions: 1.1 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 1.1 ChimeraX-BondRot: 2.0 ChimeraX-BugReporter: 1.0 ChimeraX-BuildStructure: 2.2 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.0 ChimeraX-ButtonPanel: 1.0 ChimeraX-CageBuilder: 1.0 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.1 ChimeraX-ChemGroup: 2.0 ChimeraX-Clashes: 2.1 ChimeraX-ColorActions: 1.0 ChimeraX-ColorGlobe: 1.0 ChimeraX-CommandLine: 1.1.3 ChimeraX-ConnectStructure: 2.0 ChimeraX-Contacts: 1.0 ChimeraX-Core: 1.2.dev202009250242 ChimeraX-CoreFormats: 1.0 ChimeraX-coulombic: 1.0.1 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-DataFormats: 1.0 ChimeraX-Dicom: 1.0 ChimeraX-DistMonitor: 1.1 ChimeraX-DistUI: 1.0 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ExperimentalCommands: 1.0 ChimeraX-FileHistory: 1.0 ChimeraX-FunctionKey: 1.0 ChimeraX-Geometry: 1.1 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.0 ChimeraX-Hbonds: 2.1 ChimeraX-Help: 1.0 ChimeraX-HKCage: 1.0 ChimeraX-IHM: 1.0 ChimeraX-ImageFormats: 1.0 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0 ChimeraX-Label: 1.0 ChimeraX-ListInfo: 1.0 ChimeraX-Log: 1.1.1 ChimeraX-LookingGlass: 1.1 ChimeraX-Map: 1.0.1 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0 ChimeraX-MapFilter: 2.0 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.0 ChimeraX-Markers: 1.0 ChimeraX-Mask: 1.0 ChimeraX-MatchMaker: 1.1 ChimeraX-MDcrds: 2.1 ChimeraX-MedicalToolbar: 1.0.1 ChimeraX-Meeting: 1.0 ChimeraX-MLP: 1.0 ChimeraX-mmCIF: 2.2 ChimeraX-MMTF: 2.0 ChimeraX-Modeller: 1.0 ChimeraX-ModelPanel: 1.0 ChimeraX-ModelSeries: 1.0 ChimeraX-Mol2: 2.0 ChimeraX-Morph: 1.0 ChimeraX-MouseModes: 1.0 ChimeraX-Movie: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nucleotides: 2.0 ChimeraX-OpenCommand: 1.2.1 ChimeraX-PDB: 2.1.1 ChimeraX-PDBBio: 1.0 ChimeraX-PDBLibrary: 1.0 ChimeraX-PickBlobs: 1.0 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.0 ChimeraX-PubChem: 2.0.1 ChimeraX-Read-Pbonds: 1.0 ChimeraX-Registration: 1.1 ChimeraX-RemoteControl: 1.0 ChimeraX-ResidueFit: 1.0 ChimeraX-RestServer: 1.0 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 2.0 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-SaveCommand: 1.2 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0 ChimeraX-SeqView: 2.2.1 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0 ChimeraX-Shortcuts: 1.0 ChimeraX-ShowAttr: 1.0 ChimeraX-ShowSequences: 1.0 ChimeraX-SideView: 1.0 ChimeraX-Smiles: 2.0.1 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.1 ChimeraX-STL: 1.0 ChimeraX-Storm: 1.0 ChimeraX-Struts: 1.0 ChimeraX-Surface: 1.0 ChimeraX-SwapAA: 2.0 ChimeraX-SwapRes: 2.0 ChimeraX-TapeMeasure: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.0 ChimeraX-ToolshedUtils: 1.0 ChimeraX-Tug: 1.0 ChimeraX-UI: 1.3 ChimeraX-uniprot: 2.0 ChimeraX-ViewDockX: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0 ChimeraX-WebServices: 1.0 ChimeraX-Zone: 1.0 colorama: 0.4.3 comtypes: 1.1.7 cxservices: 1.0 cycler: 0.10.0 Cython: 0.29.21 decorator: 4.4.2 distlib: 0.3.1 docutils: 0.16 filelock: 3.0.12 funcparserlib: 0.3.6 grako: 3.16.5 h5py: 2.10.0 html2text: 2020.1.16 idna: 2.10 ihm: 0.17 imagecodecs: 2020.5.30 imagecodecs-lite: 2020.1.31 imagesize: 1.2.0 ipykernel: 5.3.4 ipython: 7.18.1 ipython-genutils: 0.2.0 jedi: 0.17.2 Jinja2: 2.11.2 jupyter-client: 6.1.7 jupyter-core: 4.6.3 kiwisolver: 1.2.0 line-profiler: 2.1.2 lxml: 4.5.2 MarkupSafe: 1.1.1 matplotlib: 3.3.2 msgpack: 1.0.0 netCDF4: 1.5.4 netifaces: 0.10.9 networkx: 2.5 numexpr: 2.7.1 numpy: 1.19.2 numpydoc: 1.1.0 openvr: 1.12.501 packaging: 20.4 parso: 0.7.1 pexpect: 4.8.0 pickleshare: 0.7.5 Pillow: 7.2.0 pip: 20.2.3 pkginfo: 1.5.0.1 prompt-toolkit: 3.0.7 psutil: 5.7.2 ptyprocess: 0.6.0 pycollada: 0.7.1 pydicom: 2.0.0 Pygments: 2.7.1 PyOpenGL: 3.1.5 PyOpenGL-accelerate: 3.1.5 pyparsing: 2.4.7 PyQt5-commercial: 5.15.1 PyQt5-sip: 12.8.1 PyQtWebEngine-commercial: 5.15.1 python-dateutil: 2.8.1 pytz: 2020.1 pyzmq: 19.0.2 qtconsole: 4.7.7 QtPy: 1.9.0 RandomWords: 0.3.0 requests: 2.24.0 scipy: 1.5.2 setuptools: 50.3.0 sfftk-rw: 0.6.6.dev0 six: 1.15.0 snowballstemmer: 2.0.0 sortedcontainers: 2.2.2 Sphinx: 3.2.1 sphinxcontrib-applehelp: 1.0.2 sphinxcontrib-blockdiag: 2.0.0 sphinxcontrib-devhelp: 1.0.2 sphinxcontrib-htmlhelp: 1.0.3 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 1.0.3 sphinxcontrib-serializinghtml: 1.1.4 suds-jurko: 0.6 tables: 3.6.1 tifffile: 2020.9.3 tinyarray: 1.2.3 tornado: 6.0.4 traitlets: 5.0.4 urllib3: 1.25.10 wcwidth: 0.2.5 webcolors: 1.11.1 wheel: 0.34.2
Change History (24)
comment:1 by , 5 years ago
Cc: | added |
---|---|
Component: | Unassigned → UI |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → Warning when quitting about WebEnginePage profile released too soon |
comment:2 by , 5 years ago
Cc: | removed |
---|---|
Owner: | changed from | to
At ChimeraX shutdown I typically get 3 of the same warning "WARNING: Release of profile requested but WebEnginePage still not deleted. Expect troubles !" on macOS, Windows and Linux. My guess it is from the profiles created in ui/widgets/htmlview.py. Seems the profiles get released at shutdown before the web page view. I couldn't figure out how to fix this. Reassigning to Greg who wrote that profile code.
comment:3 by , 5 years ago
Milestone: | → 1.2 |
---|
Would be worth trying to fix this for the 1.2 release. Not a big deal on Mac and Windows since the users will not see these warnings. But Linux users will see them every time the start ChimeraX from a shell and it is likely to cause confusion.
comment:6 by , 4 years ago
Priority: | normal → high |
---|
We sometimes get crash reports on exit in Qt such as #5067 when it is deleting all its widgets. Maybe some of those crashes are related to this bug. It is about time we fix this WebEnginePage profile release problem so we aren't wasting time with other cryptic crash bugs that might be caused by this. As the Qt warning says "Expect troubles !".
comment:7 by , 4 years ago
Tried debugging this. The basic problem is the QWebEngineProfile gets deleted while the QWebEnginePage that is using it has not yet been deleted. The QWebEnginePage (base class of _LoggingPage) is set as the page for the QWebEngineView widget. The profile has a parent passed into create_chimerax_profile() usually set to the tool window main widget, for example, by the Log panel. When that widget is deleted at shutdown (the Log never is deleted) the profile gets deleted, but apparently the QWebEnginePage which has as its parent the ChimeraXHtmlView has not yet been deleted. Maybe the trouble here is that the children are deleted in some order and the profile ends up getting deleted before HtmlView and QWebEnginePage.
One trick that I thought might work is make the profile have no parent. Then it would probably get deleted at shutdown after all the widgets have been deleted. This sometimes gets rid of the warnings at shutdown and sometimes does not, about 50% chance. QWebEnginePage is not a QWidget, it inherits from QObject and the only way to delete it is with QObject.deleteLater(). So it is hard to force it to be deleted before the profile is deleted. I was not able to find any reliable way to do that. I tried making the QWebEnginePage a child of the profile since QObject children get deleted before parents and this weird hierarchy caused a segfault at exit.
I think the problem may be that QWebEnginePage is never destroyed at shutdown because it requires deleteLater() and I think that delete will only complete when the event loop is run, and at shutdown the event loop will no longer be run. The QWebEngineProfile also only has deleteLater(), but the warning message is not that it has been deleted, but "Release of profile requested...".
Possibly we could avoid this warning by keeping the event loop running until all windows are closed. But that seems like it will just slowdown exiting.
comment:8 by , 4 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Fixed.
Made ChimeraXHtmlView instances delete themselves on the "app quit" trigger. This apparently allows the QWebEnginePage to be deleted before the profile is deleted avoiding the warnings on exit.
comment:9 by , 4 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Unfortunately this fix was not a real fix. It simply made the warnings go to the GUI logger at exit instead of to the shell because the warning occurs earlier in shutdown. Since the GUI log panel immediately goes away the warnings are never seen.
With the "--exit" startup option and running a command script from the shell (#5344) the warning messages once again appear in the shell.
comment:11 by , 3 years ago
Owner: | changed from | to
---|---|
Status: | reopened → assigned |
comment:12 by , 3 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
I no longer see these warning messages with Qt 6.
comment:13 by , 3 years ago
If Greg saw this on Linux with Qt 6.3 then it should be reopened. My previous comment 12 was that I do not see it on Intel Mac ChimeraX.
comment:14 by , 3 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Let's reopen for now, I'll do some digging.
comment:15 by , 3 years ago
Milestone: | 1.4 → 1.5 |
---|
Tom confirmed it's not a showstopper for 1.4, so I'm remilestoning it since the release candidates are starting to come out.
comment:16 by , 3 years ago
Cc: | added; removed |
---|
CCing the programmers mailing list because this may involve rethinking init.
This is probably a spurious error. It doesn't seem to be affecting anything negatively, and when I search the internet for how others have fixed such a bug the information is limited. However, one thing that consistently solves the issue is calling QApplication.exec()
from underneath the if __name__ == "__main__"
construct.
If I modify init to return sess.ui, then call sess.ui.event_loop right afterwards in __main__.py
, the errors go away.
But I'm definitely not comfortable committing that without a review of the solution, so I may open a PR.
comment:17 by , 3 years ago
Our startup code should be as clean as possible, no rearrangements to hide error messages, especially when we don't even understand why it is hiding the message.
I just tried ChimeraX daily build on ubuntu 20.04 and I don't get the warning described in this bug report. Also I have not seen that warning on Mac in maybe a year. If you have a way reproducing this bug in current ChimeraX daily build please comment on how you reproduce it.
comment:18 by , 3 years ago
On macOS, from the root of the repo:
./ChimeraX.app/bin/ChimeraX --exit benchmark.py
follow-up: 19 comment:19 by , 3 years ago
Do we know any way to produce the warning that a user is likely to encounter? If not I'd suggest we ignore it, give it low priority, or close it. I made this ticket because it was annoying when running from the shell because it appeared after every use of ChimeraX from the shell. But it seems it does not appear except when running special scripts. So the problem is much reduced. I only think it is worth working on if in fact it is leading to crashes as the ominous warning message suggests might happen. We have no evidence of crashes.
comment:20 by , 3 years ago
I gave this some thought and, while I understand your reasoning, I think we may want to do this anyway.
We want to distribute a library that users can use to make sessions. The ChimeraX GUI is a special and complex use of our sessions.
The user CAN just import chimerax.core.session.Session
and make a session object directly, but we have all this great scaffolding already to initialize one.
Tweaking init()
to reflect that makes it more flexible.
follow-up: 21 comment:21 by , 3 years ago
The ChimeraX init() function already has an event_loop = True argument that controls whether the event loop is run. I think the code is worse splitting that out, requiring looking in multiple files to understand how the gui starts up.
comment:22 by , 3 years ago
The change seems okay to me, though I would want a comment where the event loop used to be started that noted that it is now started in __main.py
comment:24 by , 3 years ago
Milestone: | 1.5 |
---|
This probably comes from the QWebEngineProfile instances created in bundles/ui/src/widgets/htmlview.py.