Opened 5 years ago

Last modified 3 years ago

#3761 reopened defect

Warning when quitting about WebEnginePage profile released too soon

Reported by: goddard@… 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 Tom Goddard, 5 years ago

Cc: Greg Couch pett added
Component: UnassignedUI
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionWarning when quitting about WebEnginePage profile released too soon

This probably comes from the QWebEngineProfile instances created in bundles/ui/src/widgets/htmlview.py.

comment:2 by Tom Goddard, 5 years ago

Cc: Greg Couch removed
Owner: changed from Tom Goddard to Greg Couch

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 Tom Goddard, 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:4 by Tom Goddard, 4 years ago

Milestone: 1.2

Ticket retargeted after milestone closed

comment:5 by Tom Goddard, 4 years ago

Milestone: 1.3

Remilestone 1.2 to 1.3.

comment:6 by Tom Goddard, 4 years ago

Priority: normalhigh

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 Tom Goddard, 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 Tom Goddard, 4 years ago

Resolution: fixed
Status: assignedclosed

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 Tom Goddard, 4 years ago

Resolution: fixed
Status: closedreopened

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:10 by Greg Couch, 4 years ago

Milestone: 1.31.4

Deferring to 1.4 release and PyQt6 integration.

comment:11 by Greg Couch, 3 years ago

Owner: changed from Greg Couch to Zach Pearson
Status: reopenedassigned

comment:12 by Tom Goddard, 3 years ago

Resolution: fixed
Status: assignedclosed

I no longer see these warning messages with Qt 6.

comment:13 by Tom Goddard, 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 Zach Pearson, 3 years ago

Resolution: fixed
Status: closedreopened

Let's reopen for now, I'll do some digging.

comment:15 by Zach Pearson, 3 years ago

Milestone: 1.41.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 Zach Pearson, 3 years ago

Cc: chimerax-programmers added; pett 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 Tom Goddard, 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 Zach Pearson, 3 years ago

On macOS, from the root of the repo:

./ChimeraX.app/bin/ChimeraX --exit benchmark.py

in reply to:  19 ; comment:19 by goddard@…, 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 Zach Pearson, 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.

Here's my proposed patch.

in reply to:  21 ; comment:21 by goddard@…, 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 pett, 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:23 by Zach Pearson, 3 years ago

Added some text to that effect and noted this ticket in it.

comment:24 by Zach Pearson, 3 years ago

Milestone: 1.5
Note: See TracTickets for help on using tickets.