Opened 5 years ago

Closed 5 years ago

#3694 closed defect (fixed)

Crash adding then deleting residue

Reported by: Tristan Croll Owned by: pett
Priority: normal Milestone:
Component: Core Version:
Keywords: Cc: Tom Goddard
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Linux-3.10.0-1127.19.1.el7.x86_64-x86_64-with-centos-7.8.2003-Core
ChimeraX Version: 1.1rc202009022202 (2020-09-02 22:02:29 UTC)
Description
Adding a residue to the N-terminus of a chain and then deleting it causes a segmentation fault in _make_ribbon_graphics() (possibly at other positions in the chain as well - haven't tried). Looks like somehow the deleted residue is still being queried?

(command line)
open 3fhr
sel /A:33

(shell)
m = session.models.list()[0]
from chimerax.isolde.atomic.building.build_utils import add_amino_acid_residue
from chimerax.atomic import selected_residues
add_amino_acid_residue(m, 'PRO', next_res=selected_residues(session)[0])

(command line)
del /A:32

<segfault>

Current thread 0x00007f55055c9740 (most recent call first):
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/molc.py", line 195 in get_prop
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/ribbon.py", line 96 in _make_ribbon_graphics
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/ribbon.py", line 588 in compute_ribbons
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/structure.py", line 559 in _create_ribbon_graphics
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/structure.py", line 302 in update_graphics_if_needed
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/structure.py", line 1567 in _update_graphics_if_needed
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/core/triggerset.py", line 130 in invoke
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/core/triggerset.py", line 213 in _activate
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/core/triggerset.py", line 182 in activate
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/core/triggerset.py", line 350 in activate_trigger
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/graphics/view.py", line 269 in check_for_drawing_change
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/core/updateloop.py", line 65 in draw_new_frame
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/core/updateloop.py", line 138 in _redraw_timer_callback
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/ui/gui.py", line 269 in event_loop
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/ChimeraX_main.py", line 772 in init
  File "/opt/UCSF/ChimeraX/lib/python3.7/site-packages/ChimeraX_main.py", line 919 in <module>
  File "/opt/UCSF/ChimeraX/lib/python3.7/runpy.py", line 85 in _run_code
  File "/opt/UCSF/ChimeraX/lib/python3.7/runpy.py", line 193 in _run_module_as_main

Program received signal SIGSEGV, Segmentation fault.
0x00007fffb072b55a in residue_secondary_structure_id () from /opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/libmolc.so
Missing separate debuginfos, use: debuginfo-install ucsf-chimerax-1.1-0.2020.09.02.el7.x86_64
(gdb) bt
#0  0x00007fffb072b55a in residue_secondary_structure_id ()
    at /opt/UCSF/ChimeraX/lib/python3.7/site-packages/chimerax/atomic/libmolc.so
#1  0x00007fffe760de2c in ffi_call_unix64 () at /lib64/libffi.so.6
#2  0x00007fffe760d755 in ffi_call () at /lib64/libffi.so.6
#3  0x00007fffe78221fa in _ctypes_callproc (argcount=3, resmem=0x7fffffffa6d0, restype=<optimized out>, atypes=<optimized out>, avalues=0x7fffffffa6a0, pProc=0x7fffb072b240 <residue_secondary_structure_id>, flags=4357) at ./tmp/Python-3.7.8/Modules/_ctypes/callproc.c:829
#4  0x00007fffe78221fa in _ctypes_callproc (pProc=pProc@entry=0x7fffb072b240 <residue_secondary_structure_id>, argtuple=argtuple@entry=0x7ffe9110cb40, 


Log:
UCSF ChimeraX version: 1.1rc202009022202 (2020-09-02)  
© 2016-2020 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  




OpenGL version: 3.3.0 NVIDIA 450.51.06
OpenGL renderer: TITAN Xp/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Manufacturer: Dell Inc.
Model: Precision T5600
OS: CentOS Linux 7 Core
Architecture: 64bit ELF
CPU: 32 Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz
Cache Size: 20480 KB
Memory:
	              total        used        free      shared  buff/cache   available
	Mem:            62G        4.9G         48G        255M        9.7G         57G
	Swap:          4.9G          0B        4.9G

Graphics:
	03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP102 [TITAN Xp] [10de:1b02] (rev a1)	
	Subsystem: NVIDIA Corporation Device [10de:11df]	
	Kernel driver in use: nvidia
PyQt version: 5.12.3
Compiled Qt version: 5.12.4
Runtime Qt version: 5.12.9
Installed Packages:
    alabaster: 0.7.12
    appdirs: 1.4.4
    Babel: 2.8.0
    backcall: 0.2.0
    blockdiag: 2.0.1
    certifi: 2020.6.20
    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.6.1
    ChimeraX-AtomSearch: 2.0
    ChimeraX-AxesPlanes: 2.0
    ChimeraX-BasicActions: 1.1
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 1.0.1
    ChimeraX-BondRot: 2.0
    ChimeraX-BugReporter: 1.0
    ChimeraX-BuildStructure: 2.0
    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.0
    ChimeraX-Clipper: 0.15.0
    ChimeraX-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-CommandLine: 1.1.3
    ChimeraX-ConnectStructure: 2.0
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.1rc202009022202
    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.0
    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-ISOLDE: 1.0.2
    ChimeraX-Label: 1.0
    ChimeraX-LinuxSupport: 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.0
    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
    ChimeraX-PDBBio: 1.0
    ChimeraX-Phenix: 0.1
    ChimeraX-PickBlobs: 1.0
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.0
    ChimeraX-PubChem: 2.0
    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
    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
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.0.4
    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.2.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.20
    decorator: 4.4.2
    distlib: 0.3.1
    distro: 1.5.0
    docutils: 0.16
    filelock: 3.0.12
    funcparserlib: 0.3.6
    grako: 3.16.5
    graphviz: 0.14.1
    h5py: 2.10.0
    html2text: 2020.1.16
    idna: 2.10
    ihm: 0.16
    imagecodecs: 2020.5.30
    imagecodecs-lite: 2020.1.31
    imagesize: 1.2.0
    ipykernel: 5.3.0
    ipython: 7.15.0
    ipython-genutils: 0.2.0
    jedi: 0.17.2
    Jinja2: 2.11.2
    jupyter-client: 6.1.3
    jupyter-core: 4.6.3
    kiwisolver: 1.2.0
    line-profiler: 2.1.2
    lxml: 4.5.1
    MarkupSafe: 1.1.1
    matplotlib: 3.2.1
    msgpack: 1.0.0
    netifaces: 0.10.9
    networkx: 2.4
    numexpr: 2.7.1
    numpy: 1.18.5
    numpydoc: 1.0.0
    objgraph: 3.4.1
    openvr: 1.12.501
    packaging: 20.4
    parso: 0.7.1
    pexpect: 4.8.0
    pickleshare: 0.7.5
    Pillow: 7.1.2
    pip: 20.2.2
    pkginfo: 1.5.0.1
    prompt-toolkit: 3.0.7
    psutil: 5.7.0
    ptyprocess: 0.6.0
    pycollada: 0.7.1
    pydicom: 2.0.0
    Pygments: 2.6.1
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 2.4.7
    PyQt5-commercial: 5.12.3
    PyQt5-sip: 4.19.19
    PyQtWebEngine-commercial: 5.12.1
    python-dateutil: 2.8.1
    pytz: 2020.1
    pyzmq: 19.0.2
    qtconsole: 4.7.4
    QtPy: 1.9.0
    RandomWords: 0.3.0
    requests: 2.24.0
    scipy: 1.4.1
    setuptools: 49.4.0
    sfftk-rw: 0.6.6.dev0
    six: 1.15.0
    snowballstemmer: 2.0.0
    sortedcontainers: 2.2.2
    Sphinx: 3.1.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.6.3
    tinyarray: 1.2.2
    tornado: 6.0.4
    traitlets: 5.0.2
    urllib3: 1.25.10
    wcwidth: 0.2.5
    webcolors: 1.11.1
    wheel: 0.34.2

Change History (14)

comment:1 by pett, 5 years ago

Cc: pett added
Component: UnassignedCore
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionCrash adding then deleting residue

Apparently asking for the secondary-structure ID of a dead residue. Which means that the Residues collection being used by the ribbon code hasn't yet been cleared of dead residues when used -- which implies a timing issue.

comment:2 by Tom Goddard, 5 years ago

The crash happens after a redraw timer goes off so ChimeraX is back to the event loop. So this does not look like at timing issue -- it looks like the residue delete simply does not remove the residue from the Residues collection. I don't know what the timing is of residues being removed from arrays, Eric knows that, but it certainly cannot be delayed until after the event loop gets control.

comment:3 by Tom Goddard, 5 years ago

Thanks for the precise steps to reproduce the crash. Does it happen every time for you?

The crash does not happen in ChimeraX 1.0 following the exact steps, tried 2 times. I do not have ISOLDE for ChimeraX 1.1 RC so I cannot reproduce the problem. Can you provide wheels for ISOLDE and Clipper (if needed) so I can reproduce the crash with 1.1 rc?

comment:4 by pett, 5 years ago

The Array_Updater class in molc.cpp is a direct DestructionObserver, so it isn't waiting for any Python-level triggers for sure.

Last edited 5 years ago by pett (previous) (diff)

comment:5 by Tom Goddard, 5 years ago

Skipping the ISOLDE adding of a residue and just deleting the terminal /A:33 does not cause a crash. If that does not cause a crash for you I would be concerned that the ISOLDE code that added the residue did not add it properly. Do you add it purely from Python or do you use C++?

in reply to:  6 ; comment:6 by Tristan Croll, 5 years ago

Reproduced 4 times in a row on my Linux machine (first 3 with ISOLDE running; 4th from a fresh start using only the steps described). Can provide wheels in the morning- I take it you’d prefer Mac?


in reply to:  7 ; comment:7 by Tristan Croll, 5 years ago

The addition code only uses Python. I also tried simply deleting a terminal residue and didn’t trigger a crash, so it’s something about the sequential addition then deletion that does it.


in reply to:  8 ; comment:8 by Tristan Croll, 5 years ago

The add_amino_acid_residue() method lives at 
https://github.com/tristanic/isolde/blob/874878bbc4699ec4811760379af3a83c03742064/isolde/src/atomic/building/build_utils.py#L110. 
It's pretty much independent from the rest of ISOLDE (requires 
new_residue_from_template() from 
https://github.com/tristanic/isolde/blob/874878bbc4699ec4811760379af3a83c03742064/isolde/src/atomic/building/place_ligand.py#L153 
and set_new_atom_style() from 
https://github.com/tristanic/isolde/blob/874878bbc4699ec4811760379af3a83c03742064/isolde/src/atomic/building/__init__.py#L9; 
all other dependencies are ChimeraX or vanilla Python stuff) so if you 
wanted to test urgently it wouldn't be too difficult to cut these out 
into a standalone script.

On 2020-09-08 20:06, ChimeraX wrote:

in reply to:  9 ; comment:9 by goddard@…, 5 years ago

Thanks, I'll wait for the wheels.  Mac would be best.  If it does not reproduce on Mac then I can try Linux.

in reply to:  10 ; comment:10 by Tristan Croll, 5 years ago

Mac builds are on my Google Drive.

Clipper: 
https://drive.google.com/file/d/123n5On8WrCv7Itqh8Vragb_sx8JDttpm/view?usp=sharing
ISOLDE: 
https://drive.google.com/file/d/1R0agQle24wQlftEjiDDnz9lh21T1oiMW/view?usp=sharing

Also crashes here, albeit subtly different. First time didn't crash 
until I repeated the add-residue step (i.e. added, deleted, then added 
again). Second time crashed right on cue.

On 2020-09-08 22:27, ChimeraX wrote:

comment:11 by pett, 5 years ago

Beginning to feel like a memory-trashing problem.

comment:12 by Tom Goddard, 5 years ago

Cc: Tom Goddard added; pett removed
Owner: changed from Tom Goddard to pett

After adding and deleting residue pro:32 the Chain object c = m.residues[0].chain still has a dead residue c[18] = pro:32 and any use of that residue causes a crash. Somehow the Chain object is not removing the deleted residue. Eric develops the C++ atomic data structures so reassigning to him.

comment:13 by pett, 5 years ago

Status: assignedaccepted

comment:14 by pett, 5 years ago

Resolution: fixed
Status: acceptedclosed

For the specific case of a residue being added into the missing-structure part of a chain, the residue's 'chain' attribute wasn't being set.

Note: See TracTickets for help on using tickets.