Skip to content
This repository has been archived by the owner on Mar 29, 2024. It is now read-only.

Crash while loading a tlp file from python #98

Closed
renoust opened this issue Apr 18, 2019 · 2 comments
Closed

Crash while loading a tlp file from python #98

renoust opened this issue Apr 18, 2019 · 2 comments

Comments

@renoust
Copy link

renoust commented Apr 18, 2019

This one is reproducible:

From an existing tlpx project, loading a tlp file with loadgraph as follows:

from tulip import tlp

def main(graph): 
  graph.clear()
  tlp.loadGraph('/mypath/myfile.tlp', graph)

In most but not all cases, it crashes.
It often does not crash with a new fresh project.

Stack below:
#00 0x0000000105311e37 in tlp::IdManager::getFreeId(unsigned int) (+0x1b7) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#1 0x00000001052cc58d in tlp::GraphImpl::getSubGraphId(unsigned int) (+0x1d) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#2 0x0000000105291e13 in tlp::GraphAbstract::GraphAbstract(tlp::Graph*, unsigned int) (+0xd3) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#3 0x000000010530a8c2 in tlp::GraphView::GraphView(tlp::Graph*, tlp::BooleanProperty*, unsigned int) (+0x22) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#4 0x000000010529235b in tlp::GraphAbstract::addSubGraph(unsigned int, tlp::BooleanProperty*, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&) (+0x3b) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#5 0x00000001053a3f26 in tlp::TLPGraphBuilder::addCluster(int, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, int) (+0x216) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#6 0x000000010539e8ff in tlp::TLPClusterBuilder::addInt(int) (+0x3f) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#7 0x00000001053a2fa0 in tlp::TLPParser::parse() (+0x100) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#8 0x00000001053a2199 in tlp::TLPImport::importGraph() (+0x619) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#9 0x0000000105297a7c in tlp::importGraph(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, tlp::DataSet&, tlp::PluginProgress*, tlp::Graph*) (+0x1bc) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-core-5.2.dylib

#10 0x0000000116f88ad1 in meth_tlp_loadGraph(_object*, _object*) (+0x111) from /Applications/Tulip-5.2.0-dev.app/Contents/lib/tulip/python/tulip/native/_tulip.so

#11 0x00007fff49091f89 in PyEval_EvalFrameEx (+0xb65) from /System/Library/Frameworks/Python.framework/Versions/2.7/Python

#12 0x00007fff49091232 in PyEval_EvalCodeEx (+0x60f) from /System/Library/Frameworks/Python.framework/Versions/2.7/Python

#13 0x00007fff49038935 in PyFunction_SetClosure (+0x322) from /System/Library/Frameworks/Python.framework/Versions/2.7/Python

#14 0x00007fff4901b581 in PyObject_Call (+0x61) from /System/Library/Frameworks/Python.framework/Versions/2.7/Python

#15 0x00007fff49096bfe in PyEval_CallObjectWithKeywords (+0x9f) from /System/Library/Frameworks/Python.framework/Versions/2.7/Python

#16 0x0000000116ac10a1 in tlp::PythonInterpreter::runGraphScript(QString const&, QString const&, tlp::Graph*, QString const&) (+0x241) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-python-5.2.dylib

#17 0x0000000116b46be0 in tlp::PythonIDE::executeCurrentScript() (+0x420) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/libtulip-python-5.2.dylib

#18 0x000000010c7fc279 in QMetaObject::activate(QObject*, int, int, void**) (+0xc29) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore

#19 0x0000000105b7ba50 in QAbstractButton::isCheckable() const (+0x330) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#20 0x0000000105b7b8e0 in QAbstractButton::isCheckable() const (+0x1c0) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#21 0x0000000105b7c94f in QAbstractButton::mouseReleaseEvent(QMouseEvent*) (+0x10f) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#22 0x0000000105c62f9f in QToolButton::mouseReleaseEvent(QMouseEvent*) (+0xf) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#23 0x0000000105ab1c06 in QWidget::event(QEvent*) (+0x246) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#24 0x0000000105b7c6b0 in QAbstractButton::event(QEvent*) (+0xa0) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#25 0x0000000105c63565 in QToolButton::event(QEvent*) (+0x145) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#26 0x0000000105a7863d in QApplicationPrivate::notify_helper(QObject*, QEvent*) (+0x12d) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#27 0x0000000105a7b61f in QApplication::notify(QObject*, QEvent*) (+0x1def) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#28 0x000000010c7ca3a4 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (+0xa4) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore

#29 0x0000000105a78f6a in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer&, bool) (+0x36a) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#30 0x0000000105ad22e6 in QDesktopWidget::qt_metacall(QMetaObject::Call, int, void**) (+0x2346) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#31 0x0000000105ad1169 in QDesktopWidget::qt_metacall(QMetaObject::Call, int, void**) (+0x11c9) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#32 0x0000000105a7863d in QApplicationPrivate::notify_helper(QObject*, QEvent*) (+0x12d) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#33 0x0000000105a799b7 in QApplication::notify(QObject*, QEvent*) (+0x187) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets

#34 0x000000010c7ca3a4 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (+0xa4) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore

#35 0x000000010bc3f96c in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (+0xbfc) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui

#36 0x000000010bc255fb in QWindowSystemInterface::sendWindowSystemEvents(QFlagsQEventLoop::ProcessEventsFlag) (+0x9b) from /Applications/Tulip-5.2.0-dev.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui

#37 0x000000010f7b0a01 in qt_plugin_instance (+0x21101) from /Applications/Tulip-5.2.0-dev.app/Contents/PlugIns/platforms/libqcocoa.dylib

#38 0x00007fff3e8d6a61 in CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION (+0x11) from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

#39 0x00007fff3e99047c in __CFRunLoopDoSource0 (+0x6c) from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

#40 0x00007fff3e8b94c0 in __CFRunLoopDoSources0 (+0xd0) from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

#41 0x00007fff3e8b893d in __CFRunLoopRun (+0x50d) from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

#42 0x00007fff3e8b81a3 in CFRunLoopRunSpecific (+0x1e3) from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

#43 0x00007fff3dba0d96 in RunCurrentEventLoopInMode (+0x11e) from /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox

#44 0x00007fff3dba0a0f in ReceiveNextEventCommon (+0x16e) from /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox

#45 0x00007fff3dba0884 in _BlockUntilNextEventMatchingListInModeWithFilter (+0x40) from /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox

#46 0x00007fff3be53a73 in _DPSNextEvent (+0x825) from /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit

#47 0x00007fff3c5e9e34 in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (+0xbe4) from /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit

#48 0x00007fff3be48885 in -[NSApplication run] (+0x2fc) from /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit

#49 0x000000010f7af76d in qt_plugin_instance (+0x1fe6d) from /Applications/Tulip-5.2.0-dev.app/Contents/PlugIns/platforms/libqcocoa.dylib

@anlambert
Copy link
Contributor

I managed to reproduce the issue from my side. The scenario to reproduce it is the following:

  1. Open a graph containing subgraphs
  2. Clear the graph
  3. Try to load another graph with subgraphs from a TLP file but reuse the same tlp::Graph instance instead of populating a new empty graph
  4. If the intersection of the two set of subgraph ids is not empty, Tulip will crash.

See stacktrace in debug mode below:

tulip_perspective: /home/antoine/dev/tulip/library/tulip-core/src/IdManager.cpp :95 : void tlp::IdManager::getFreeId(unsigned int):  l'assertion « state.freeIds.find(id) != state.freeIds.end() » a échoué.
TLP_PLATEFORM linux
TLP_ARCH x86_64
TLP_COMPILER Clang
TLP_VERSION 5.3.1-dev
TLP_STACK_BEGIN
#00 0x00007f386df0efcf in gsignal (+0xcf) at /build/glibc-p3Km7c/glibc-2.24/signal/../sysdeps/unix/sysv/linux/nptl-signals.h:79 from /lib/x86_64-linux-gnu/libc.so.6                           
#01 0x00007f386df103fa in abort (+0x16a) at /build/glibc-p3Km7c/glibc-2.24/stdlib/abort.c:89 from /lib/x86_64-linux-gnu/libc.so.6                                                              
#02 0x00007f386df07e37 in ?? (+0x2be37) from /lib/x86_64-linux-gnu/libc.so.6                                                                                                                   
#03 0x00007f386df07ee2 in ?? (+0x2bee2) from /lib/x86_64-linux-gnu/libc.so.6                                                                                                                   
#04 0x00007f38723eaf10 in tlp::IdManager::getFreeId(unsigned int) (+0x880) at /home/antoine/dev/tulip/library/tulip-core/src/IdManager.cpp:95 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                                                                
#05 0x00007f3872279760 in tlp::GraphImpl::getSubGraphId(unsigned int) (+0x50) at /home/antoine/dev/tulip/library/tulip-core/src/GraphImpl.cpp:87 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                                                             
#06 0x00007f3872155f4a in tlp::GraphAbstract::GraphAbstract(tlp::Graph*, unsigned int) (+0x2ea) at /home/antoine/dev/tulip/library/tulip-core/src/GraphAbstract.cpp:42 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                                       
#07 0x00007f38723c0d59 in tlp::GraphView::GraphView(tlp::Graph*, tlp::BooleanProperty*, unsigned int) (+0x299) at /home/antoine/dev/tulip/library/tulip-core/src/GraphView.cpp:32 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                            
#08 0x00007f3872157285 in tlp::GraphAbstract::addSubGraph(unsigned int, tlp::BooleanProperty*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (+0x1c5) at /home/antoine/dev/tulip/library/tulip-core/src/GraphAbstract.cpp:89 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                       
#09 0x00007f38726b6b19 in tlp::TLPGraphBuilder::addCluster(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) (+0x429) at /home/antoine/dev/tulip/library/tulip-core/src/TLPImport.cpp:473 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                    
#10 0x00007f3872693d92 in tlp::TLPClusterBuilder::addInt(int) (+0x292) at /home/antoine/dev/tulip/library/tulip-core/src/TLPImport.cpp:557 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                                                                   
#11 0x00007f38726b05d2 in tlp::TLPParser::parse() (+0xd02) at /home/antoine/dev/tulip/library/tulip-core/include/tulip/TLPParser.h:448 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                                                                       
#12 0x00007f38726ae2fc in tlp::TLPImport::importGraph() (+0x16dc) at /home/antoine/dev/tulip/library/tulip-core/src/TLPImport.cpp:1031 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                                                                                                                                       
#13 0x00007f387217a889 in tlp::importGraph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tlp::DataSet&, tlp::PluginProgress*, tlp::Graph*) (+0x459) at /home/antoine/dev/tulip/library/tulip-core/src/Graph.cpp:407 from /home/antoine/dev/tulip_build_clang/install/bin/../lib/libtulip-core-5.3.so                                                
#14 0x00007f3827b366c2 in ?? (+0xbfa6c2) from /home/antoine/dev/tulip_build_clang/install/lib/tulip/python/tulip/native/_tulip.so                                                              
#15 0x00007f3828703091 in PyEval_EvalFrameEx (+0x8541) from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0                                                                                      
#16 0x00007f382886a29c in PyEval_EvalCodeEx (+0x86c) from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0                                                                                        
#17 0x00007f38287be670 in ?? (+0x13e670) from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0                                                                                                    
#18 0x00007f38287565c3 in PyObject_Call (+0x43) from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0                                                                                             
#19 0x00007f38288696c7 in PyEval_CallObjectWithKeywords (+0x47) from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0                                                                             
#20 0x00007f3828e00f03 in tlp::PythonInterpreter::runGraphScript(QString const&, QString const&, tlp::Graph*, QString const&) (+0x793) at /home/antoine/dev/tulip/library/tulip-python/src/PythonInterpreter.cpp:677 from /home/antoine/dev/tulip_build_clang/install/lib/tulip/perspective/../../libtulip-python-5.3.so                                                                      
#21 0x00007f382903cc0a in tlp::PythonIDE::executeCurrentScript() (+0xfba) at /home/antoine/dev/tulip/library/tulip-python/src/PythonIDE.cpp:1897 from /home/antoine/dev/tulip_build_clang/install/lib/tulip/perspective/../../libtulip-python-5.3.so                                                                                                                                          
#22 0x00007f382908a2d0 in ?? (+0x4782d0) from /home/antoine/dev/tulip_build_clang/install/lib/tulip/perspective/../../libtulip-python-5.3.so                                                   
#23 0x00007f386eed38b9 in QMetaObject::activate(QObject*, int, int, void**) (+0x639) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5                                                            
#24 0x00007f386f874d52 in QAbstractButton::clicked(bool) (+0x42) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                             
#25 0x00007f386f874fa4 in ?? (+0x241fa4) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                                     
#26 0x00007f386f876397 in ?? (+0x243397) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                                     
#27 0x00007f386f876574 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) (+0xf4) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                           
#28 0x00007f386f94268a in QToolButton::mouseReleaseEvent(QMouseEvent*) (+0xa) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                
#29 0x00007f386f7d4118 in QWidget::event(QEvent*) (+0x358) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                   
#30 0x00007f386f942769 in QToolButton::event(QEvent*) (+0x79) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                
#31 0x00007f386f78cb8c in QApplicationPrivate::notify_helper(QObject*, QEvent*) (+0x9c) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                      
#32 0x00007f386f79520d in QApplication::notify(QObject*, QEvent*) (+0x111d) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                  
#33 0x00007f386eea7d30 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (+0x110) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5                                                         
#34 0x00007f386f7938bd in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (+0x1dd) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                                                                                                                     
#35 0x00007f386f7ee626 in ?? (+0x1bb626) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                                     
#36 0x00007f386f7f1003 in ?? (+0x1be003) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                                                     
#37 0x00007f386f78cb8c in QApplicationPrivate::notify_helper(QObject*, QEvent*) (+0x9c) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                      
#38 0x00007f386f794351 in QApplication::notify(QObject*, QEvent*) (+0x261) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5                                                                   
#39 0x00007f386eea7d30 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (+0x110) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5                                                         
#40 0x00007f386f1f1b03 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (+0x713) from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5                         
#41 0x00007f386f1f3675 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) (+0x135) from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5           
#42 0x00007f386f1d160b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (+0xbb) from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5                          
#43 0x00007f38647d2360 in ?? (+0x72360) from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5                                                                                                       
#44 0x00007f386a8937f7 in g_main_context_dispatch (+0x2a7) from /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                                         
#45 0x00007f386a893a60 in ?? (+0x4aa60) from /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                                                            
TLP_STACK_END
Abandon

@p-mary , the following diff seems to fix the issue and the tests are still green afterwards.
This is a sensible part of the Tulip code I am not comfortable with so I let you dig further
on this.

diff --git a/library/tulip-core/src/GraphAbstract.cpp b/library/tulip-core/src/GraphAbstract.cpp
index e56af985a..1b39cf957 100644
--- a/library/tulip-core/src/GraphAbstract.cpp
+++ b/library/tulip-core/src/GraphAbstract.cpp
@@ -142,12 +142,14 @@ void GraphAbstract::delSubGraph(Graph *toRemove) {
       // avoid deletion of toRemove subgraphs
       toRemove->clearSubGraphs();
       delete toRemove;
-    } else
+    } else {
       // toRemove is not deleted,
       // and its subgraphs list is not erased;
       // beacause it is registered into a GraphUpdatesRecorder
       // in order it can be restored on undo or redo
       toRemove->notifyDestroy();
+      static_cast<GraphImpl *>(getRoot())->freeSubGraphId(toRemove->getId());
+    }
   }
 }

p-mary added a commit that referenced this issue Apr 23, 2019
@p-mary
Copy link
Contributor

p-mary commented Apr 23, 2019

Thanks for your respective input.

@p-mary p-mary closed this as completed Apr 23, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants