Re-order the base classes to prevent a crash in Linux.
authorHafiz Abid Qadeer <hafiz_abid@mentor.com>
Wed, 26 Nov 2014 10:19:32 +0000 (10:19 +0000)
committerHafiz Abid Qadeer <hafiz_abid@mentor.com>
Wed, 26 Nov 2014 10:19:32 +0000 (10:19 +0000)
In the initialization list of IOHandlerConfirm, *this is basically casting
IOHandlerConfirm to its base IOHandlerDelegate and passing it to constructor of
IOHandlerEditline which uses it and crashes as constructor of IOHandlerDelegate
is still not called. Re-ordering the base classes makes sure that constructor of
IOHandlerDelegate runs first.

It would be good to have a test case for this case too.

llvm-svn: 222816

lldb/include/lldb/Core/IOHandler.h

index 8ad3820..02e6bde 100644 (file)
@@ -628,9 +628,11 @@ namespace lldb_private {
         bool m_interrupt_exits;
     };
     
+    // The order of base classes is important. Look at the constructor of IOHandlerConfirm
+    // to see how.
     class IOHandlerConfirm :
-        public IOHandlerEditline,
-        public IOHandlerDelegate
+        public IOHandlerDelegate,
+        public IOHandlerEditline
     {
     public:
         IOHandlerConfirm (Debugger &debugger,