Bug 351103 - Umbrello crashes when changing type for an operation for a class
Summary: Umbrello crashes when changing type for an operation for a class
Status: RESOLVED LATER
Alias: None
Product: umbrello
Classification: Applications
Component: general (show other bugs)
Version: 2.16.3 (KDE Applications 15.04.3)
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: Umbrello Development Group
URL:
Keywords: drkonqi
: 346896 (view as bug list)
Depends on:
Blocks: 331655
  Show dependency treegraph
 
Reported: 2015-08-09 02:14 UTC by challisto
Modified: 2016-04-15 19:41 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In: 2.17.1 (KDE Applications 15.08.1)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description challisto 2015-08-09 02:14:37 UTC
Application: umbrello (2.16.3)
KDE Platform Version: 4.14.10
Qt Version: 4.8.7
Operating System: Linux 4.1.3-2-desktop x86_64
Distribution: "openSUSE 20150805 (Tumbleweed) (x86_64)"

-- Information about the crash:
- What I was doing when the application crashed:
In a class every time I change the type from bool to int in general properties and click "OK" the program crashes.

The crash can be reproduced every time.

-- Backtrace:
Application: Umbrello UML Modeller (umbrello), signal: Segmentation fault
Using host libthread_db library "/lib64/libthread_db.so.1".
[Current thread is 1 (Thread 0x7f0ada4c2780 (LWP 10415))]

Thread 2 (Thread 0x7f0ac41fd700 (LWP 10418)):
#0  0x00007f0ad689604d in read () at /lib64/libc.so.6
#1  0x00007f0ad31c2850 in  () at /usr/lib64/libglib-2.0.so.0
#2  0x00007f0ad317f9c4 in g_main_context_check () at /usr/lib64/libglib-2.0.so.0
#3  0x00007f0ad317fe38 in  () at /usr/lib64/libglib-2.0.so.0
#4  0x00007f0ad317ff9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#5  0x00007f0ad739826e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f0abc0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:452
#6  0x00007f0ad73683e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f0ac41fce20, flags=...) at kernel/qeventloop.cpp:149
#7  0x00007f0ad73686f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f0ac41fce20, flags=...) at kernel/qeventloop.cpp:204
#8  0x00007f0ad7261a59 in QThread::exec() (this=this@entry=0x2b480f0) at thread/qthread.cpp:538
#9  0x00007f0ad73494c3 in QInotifyFileSystemWatcherEngine::run() (this=0x2b480f0) at io/qfilesystemwatcher_inotify.cpp:265
#10 0x00007f0ad726423c in QThreadPrivate::start(void*) (arg=0x2b480f0) at thread/qthread_unix.cpp:352
#11 0x00007f0ad4597324 in start_thread () at /lib64/libpthread.so.0
#12 0x00007f0ad68a270d in clone () at /lib64/libc.so.6

Thread 1 (Thread 0x7f0ada4c2780 (LWP 10415)):
[KCrash Handler]
#6  0x00007f0ad6ef5510 in __dynamic_cast () at /usr/lib64/libstdc++.so.6
#7  0x000000000057784d in  ()
#8  0x000000000055730a in  ()
#9  0x00007f0ad737cf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x30e0b80, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#10 0x00000000006967df in  ()
#11 0x000000000047d97f in  ()
#12 0x00000000004756ae in  ()
#13 0x00007f0ad737cf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x7ffd1e812170, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#14 0x00007f0ad8c6eb00 in KDialog::slotButtonClicked(int) () at /usr/lib64/libkdeui.so.5
#15 0x00007f0ad8c7046f in  () at /usr/lib64/libkdeui.so.5
#16 0x00007f0ad737cf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x31e9fd0, m=m@entry=0x7f0ad76cb880 <QSignalMapper::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffd1e8113a0) at kernel/qobject.cpp:3576
#17 0x00007f0ad7385d5e in QSignalMapper::mapped(int) (this=this@entry=0x31e9fd0, _t1=4) at .moc/release-shared/moc_qsignalmapper.cpp:114
#18 0x00007f0ad7385e64 in QSignalMapper::map(QObject*) (this=0x31e9fd0, sender=0x36c9bb0) at kernel/qsignalmapper.cpp:266
#19 0x00007f0ad737cf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x36c9bb0, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#20 0x00007f0ad8644142 in QAbstractButton::clicked(bool) () at /usr/lib64/libQtGui.so.4
#21 0x00007f0ad839c0d3 in  () at /usr/lib64/libQtGui.so.4
#22 0x00007f0ad839d2c4 in  () at /usr/lib64/libQtGui.so.4
#23 0x00007f0ad839d3b4 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib64/libQtGui.so.4
#24 0x00007f0ad8033f00 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#25 0x00007f0ad7fe0f1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#26 0x00007f0ad7fe7b53 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#27 0x00007f0ad8d1363a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#28 0x00007f0ad7369a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffd1e814150, receiver=0x36c9bb0, event=0x7ffd1e8119e0) at kernel/qcoreapplication.cpp:955
#29 0x00007f0ad7fe71ed in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib64/libQtGui.so.4
#30 0x00007f0ad805d942 in  () at /usr/lib64/libQtGui.so.4
#31 0x00007f0ad805c30d in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#32 0x00007f0ad8084882 in  () at /usr/lib64/libQtGui.so.4
#33 0x00007f0ad317fcc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#34 0x00007f0ad317fef8 in  () at /usr/lib64/libglib-2.0.so.0
#35 0x00007f0ad317ff9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#36 0x00007f0ad739824e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x2a881c0, flags=...) at kernel/qeventdispatcher_glib.cpp:450
#37 0x00007f0ad8084946 in  () at /usr/lib64/libQtGui.so.4
#38 0x00007f0ad73683e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffd1e812120, flags=...) at kernel/qeventloop.cpp:149
#39 0x00007f0ad73686f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffd1e812120, flags=...) at kernel/qeventloop.cpp:204
#40 0x00007f0ad8496bbc in QDialog::exec() () at /usr/lib64/libQtGui.so.4
#41 0x00000000006d2a8b in  ()
#42 0x000000000048d0ed in  ()
#43 0x00007f0ad737cf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x322ee20, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#44 0x00007f0ad8644142 in QAbstractButton::clicked(bool) () at /usr/lib64/libQtGui.so.4
#45 0x00007f0ad839c0d3 in  () at /usr/lib64/libQtGui.so.4
#46 0x00007f0ad839d2c4 in  () at /usr/lib64/libQtGui.so.4
#47 0x00007f0ad839d3b4 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib64/libQtGui.so.4
#48 0x00007f0ad8033f00 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#49 0x00007f0ad7fe0f1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#50 0x00007f0ad7fe7b53 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#51 0x00007f0ad8d1363a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#52 0x00007f0ad7369a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffd1e814150, receiver=0x322ee20, event=0x7ffd1e812890) at kernel/qcoreapplication.cpp:955
#53 0x00007f0ad7fe71ed in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib64/libQtGui.so.4
#54 0x00007f0ad805d942 in  () at /usr/lib64/libQtGui.so.4
#55 0x00007f0ad805c30d in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#56 0x00007f0ad8084882 in  () at /usr/lib64/libQtGui.so.4
#57 0x00007f0ad317fcc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#58 0x00007f0ad317fef8 in  () at /usr/lib64/libglib-2.0.so.0
#59 0x00007f0ad317ff9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#60 0x00007f0ad739824e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x2a881c0, flags=...) at kernel/qeventdispatcher_glib.cpp:450
#61 0x00007f0ad8084946 in  () at /usr/lib64/libQtGui.so.4
#62 0x00007f0ad73683e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffd1e812fd0, flags=...) at kernel/qeventloop.cpp:149
#63 0x00007f0ad73686f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffd1e812fd0, flags=...) at kernel/qeventloop.cpp:204
#64 0x00007f0ad8496bbc in QDialog::exec() () at /usr/lib64/libQtGui.so.4
#65 0x000000000066963c in  ()
#66 0x000000000066f3ab in  ()
#67 0x00000000006e6c70 in  ()
#68 0x000000000073086b in  ()
#69 0x00007f0ad85d8da7 in QGraphicsScene::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#70 0x00007f0ad7fe0f1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#71 0x00007f0ad7fe79ec in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#72 0x00007f0ad8d1363a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#73 0x00007f0ad7369a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffd1e814150, receiver=0x3559ad0, event=0x7ffd1e8133d0) at kernel/qcoreapplication.cpp:955
#74 0x00007f0ad85ef6c7 in QGraphicsView::mouseDoubleClickEvent(QMouseEvent*) () at /usr/lib64/libQtGui.so.4
#75 0x00007f0ad8034709 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#76 0x00007f0ad83dd96e in QFrame::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#77 0x00007f0ad85f078f in QGraphicsView::viewportEvent(QEvent*) () at /usr/lib64/libQtGui.so.4
#78 0x00007f0ad7369b86 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (this=<optimized out>, receiver=0x3559510, event=0x7ffd1e813950) at kernel/qcoreapplication.cpp:1065
#79 0x00007f0ad7fe0efc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#80 0x00007f0ad7fe7b53 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#81 0x00007f0ad8d1363a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#82 0x00007f0ad7369a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffd1e814150, receiver=0x3559510, event=0x7ffd1e813950) at kernel/qcoreapplication.cpp:955
#83 0x00007f0ad7fe71ed in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib64/libQtGui.so.4
#84 0x00007f0ad805d942 in  () at /usr/lib64/libQtGui.so.4
#85 0x00007f0ad805c30d in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#86 0x00007f0ad8084882 in  () at /usr/lib64/libQtGui.so.4
#87 0x00007f0ad317fcc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#88 0x00007f0ad317fef8 in  () at /usr/lib64/libglib-2.0.so.0
#89 0x00007f0ad317ff9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#90 0x00007f0ad739824e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x2a881c0, flags=...) at kernel/qeventdispatcher_glib.cpp:450
#91 0x00007f0ad8084946 in  () at /usr/lib64/libQtGui.so.4
#92 0x00007f0ad73683e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffd1e814080, flags=...) at kernel/qeventloop.cpp:149
#93 0x00007f0ad73686f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffd1e814080, flags=...) at kernel/qeventloop.cpp:204
#94 0x00007f0ad736def9 in QCoreApplication::exec() () at kernel/qcoreapplication.cpp:1227
#95 0x0000000000447d53 in  ()
#96 0x00007f0ad67db790 in __libc_start_main () at /lib64/libc.so.6
#97 0x000000000044a1b9 in _start ()

Reported using DrKonqi
Comment 1 Ralf Habacker 2015-08-09 06:46:49 UTC
> - What I was doing when the application crashed: In a class every time I change the type from bool to int in general properties 
The general properties page of a class does not have an options to change a type from bool to int. 
Are your refering to change the type of an attribute, the return type of a operation or the type of a operation parameter. ?
Comment 2 challisto 2015-08-09 15:49:37 UTC
(In reply to Ralf Habacker from comment #1)
> > - What I was doing when the application crashed: In a class every time I change the type from bool to int in general properties 
> The general properties page of a class does not have an options to change a
> type from bool to int. 
> Are your refering to change the type of an attribute, the return type of a
> operation or the type of a operation parameter. ?

I was changing the return type of an operation in a class.
Comment 3 challisto 2015-08-10 18:46:50 UTC
Valgrind output:

==6470== Invalid read of size 8
==6470==    at 0x7FD050D: __dynamic_cast (in /usr/lib64/libstdc++.so.6.0.21)
==6470==    by 0x57784C: ??? (in /usr/bin/umbrello)
==6470==    by 0x557309: ??? (in /usr/bin/umbrello)
==6470==    by 0x7BE8F5F: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3576)
==6470==    by 0x6967DE: ??? (in /usr/bin/umbrello)
==6470==    by 0x47D97E: ??? (in /usr/bin/umbrello)
==6470==    by 0x4756AD: ??? (in /usr/bin/umbrello)
==6470==    by 0x7BE8F5F: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3576)
==6470==    by 0x6173AFF: KDialog::slotButtonClicked(int) (in /usr/lib64/libkdeui.so.5.14.10)
==6470==    by 0x617546E: ??? (in /usr/lib64/libkdeui.so.5.14.10)
==6470==    by 0x7BE8F5F: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3576)
==6470==    by 0x7BF1D5D: QSignalMapper::mapped(int) (moc_qsignalmapper.cpp:114)
==6470==  Address 0x12876730 is 384 bytes inside a block of size 976 free'd
==6470==    at 0x4C2AA2B: operator delete(void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==6470==    by 0x696D9D0: QPainter::end() (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x696E8A7: QPainter::~QPainter() (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x6871986: QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x6872393: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x68722A1: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x68722A1: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x68715B5: QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x6872393: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x68722A1: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x68722A1: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470==    by 0x68722A1: QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) (in /usr/lib64/libQtGui.so.4.8.7)
==6470== 
==6470== Invalid read of size 8
==6470==    at 0x7FD0510: __dynamic_cast (in /usr/lib64/libstdc++.so.6.0.21)
==6470==    by 0x57784C: ??? (in /usr/bin/umbrello)
==6470==    by 0x557309: ??? (in /usr/bin/umbrello)
==6470==    by 0x7BE8F5F: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3576)
==6470==    by 0x6967DE: ??? (in /usr/bin/umbrello)
==6470==    by 0x47D97E: ??? (in /usr/bin/umbrello)
==6470==    by 0x4756AD: ??? (in /usr/bin/umbrello)
==6470==    by 0x7BE8F5F: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3576)
==6470==    by 0x6173AFF: KDialog::slotButtonClicked(int) (in /usr/lib64/libkdeui.so.5.14.10)
==6470==    by 0x617546E: ??? (in /usr/lib64/libkdeui.so.5.14.10)
==6470==    by 0x7BE8F5F: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3576)
==6470==    by 0x7BF1D5D: QSignalMapper::mapped(int) (moc_qsignalmapper.cpp:114)
==6470==  Address 0xfffffffffffffff0 is not stack'd, malloc'd or (recently) free'd
==6470== 
KCrash: Application 'umbrello' crashing...
Comment 4 Ralf Habacker 2015-08-14 08:12:06 UTC
(In reply to Challistobugs from comment #0)
> #6 0x00007f0ad6ef5510 in __dynamic_cast () at /usr/lib64/libstdc++.so.6 #7 
Looks like that dynamic_cast crashes, the possible reasons are listed here http://stackoverflow.com/questions/278429/what-could-cause-a-dynamic-cast-to-crash.

> 0x000000000057784d in () #8 0x000000000055730a in ()
This is the location in umbrello. Is it possible to install umbrello debug symbols to get a function name and file line information ?
Comment 5 challisto 2015-08-14 15:16:06 UTC
(In reply to Ralf Habacker from comment #4)
> (In reply to Challistobugs from comment #0)
> > #6 0x00007f0ad6ef5510 in __dynamic_cast () at /usr/lib64/libstdc++.so.6 #7 
> Looks like that dynamic_cast crashes, the possible reasons are listed here
> http://stackoverflow.com/questions/278429/what-could-cause-a-dynamic-cast-to-
> crash.
> 
> > 0x000000000057784d in () #8 0x000000000055730a in ()
> This is the location in umbrello. Is it possible to install umbrello debug
> symbols to get a function name and file line information ?

Application: Umbrello UML Modeller (umbrello), signal: Segmentation fault
Using host libthread_db library "/lib64/libthread_db.so.1".
[Current thread is 1 (Thread 0x7fb34a20b780 (LWP 1249))]

Thread 2 (Thread 0x7fb3341c3700 (LWP 1257)):
#0  0x00007fb3465e2fbd in poll () at /lib64/libc.so.6
#1  0x00007fb342ec8e94 in  () at /usr/lib64/libglib-2.0.so.0
#2  0x00007fb342ec8f9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#3  0x00007fb3470e126e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fb32c0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:452
#4  0x00007fb3470b13e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fb3341c2e20, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007fb3470b16f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fb3341c2e20, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007fb346faaa59 in QThread::exec() (this=this@entry=0xceae80) at thread/qthread.cpp:538
#7  0x00007fb3470924c3 in QInotifyFileSystemWatcherEngine::run() (this=0xceae80) at io/qfilesystemwatcher_inotify.cpp:265
#8  0x00007fb346fad23c in QThreadPrivate::start(void*) (arg=0xceae80) at thread/qthread_unix.cpp:352
#9  0x00007fb3442e0324 in start_thread () at /lib64/libpthread.so.0
#10 0x00007fb3465eb70d in clone () at /lib64/libc.so.6

Thread 1 (Thread 0x7fb34a20b780 (LWP 1249)):
[KCrash Handler]
#6  0x00007fb346c3e510 in __dynamic_cast () at /usr/lib64/libstdc++.so.6
#7  0x000000000057784d in CPPSourceCodeOperation::updateMethodDeclaration() (this=0x137a030) at /usr/src/debug/umbrello-15.04.3/umbrello/codegenerators/cpp/cppsourcecodeoperation.cpp:49
#8  0x000000000055730a in CodeMethodBlock::syncToParent() (this=0x137a038) at /usr/src/debug/umbrello-15.04.3/umbrello/codegenerators/codemethodblock.cpp:173
#9  0x00007fb3470c5f60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x1259a40, m=m@entry=0x7c5200 <UMLObject::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x0) at kernel/qobject.cpp:3576
#10 0x0000000000727983 in UMLObject::emitModified() (this=0x1259a40) at /usr/src/debug/umbrello-15.04.3/build/umbrello/umlobject.moc:145
#11 0x0000000000727983 in UMLObject::emitModified() (this=this@entry=0x7fb34a20b780) at /usr/src/debug/umbrello-15.04.3/umbrello/umlobject.cpp:351
#12 0x00000000006967df in UMLClassifierListItem::setTypeName(QString const&) (this=0x7fb34a20b780, type=...) at /usr/src/debug/umbrello-15.04.3/umbrello/classifierlistitem.cpp:157
#13 0x000000000047d97f in UMLOperationDialog::apply() (this=0x7ffe6fe9b7e0) at /usr/src/debug/umbrello-15.04.3/umbrello/dialogs/umloperationdialog.cpp:422
#14 0x00000000004756ae in SinglePageDialogBase::slotOk() (this=0x7ffe6fe9b7e0) at /usr/src/debug/umbrello-15.04.3/umbrello/dialogs/singlepagedialogbase.cpp:57
#15 0x00007fb3470c5f60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x7ffe6fe9b7e0, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#16 0x00007fb3489b7b00 in KDialog::slotButtonClicked(int) () at /usr/lib64/libkdeui.so.5
#17 0x00007fb3489b946f in  () at /usr/lib64/libkdeui.so.5
#18 0x00007fb3470c5f60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x1622590, m=m@entry=0x7fb347414880 <QSignalMapper::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffe6fe9aa10) at kernel/qobject.cpp:3576
#19 0x00007fb3470ced5e in QSignalMapper::mapped(int) (this=this@entry=0x1622590, _t1=4) at .moc/release-shared/moc_qsignalmapper.cpp:114
#20 0x00007fb3470cee64 in QSignalMapper::map(QObject*) (this=0x1622590, sender=0x1929b50) at kernel/qsignalmapper.cpp:266
#21 0x00007fb3470c5f60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x1929b50, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#22 0x00007fb34838d142 in QAbstractButton::clicked(bool) () at /usr/lib64/libQtGui.so.4
#23 0x00007fb3480e50d3 in  () at /usr/lib64/libQtGui.so.4
#24 0x00007fb3480e62c4 in  () at /usr/lib64/libQtGui.so.4
#25 0x00007fb3480e63b4 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib64/libQtGui.so.4
#26 0x00007fb347d7cf00 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#27 0x00007fb347d29f1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#28 0x00007fb347d30b53 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#29 0x00007fb348a5c63a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#30 0x00007fb3470b2a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffe6fe9daa0, receiver=0x1929b50, event=0x7ffe6fe9b050) at kernel/qcoreapplication.cpp:955
#31 0x00007fb347d301ed in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib64/libQtGui.so.4
#32 0x00007fb347da6942 in  () at /usr/lib64/libQtGui.so.4
#33 0x00007fb347da530d in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#34 0x00007fb347dcd882 in  () at /usr/lib64/libQtGui.so.4
#35 0x00007fb342ec8cc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#36 0x00007fb342ec8ef8 in  () at /usr/lib64/libglib-2.0.so.0
#37 0x00007fb342ec8f9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#38 0x00007fb3470e124e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0xc141c0, flags=...) at kernel/qeventdispatcher_glib.cpp:450
#39 0x00007fb347dcd946 in  () at /usr/lib64/libQtGui.so.4
#40 0x00007fb3470b13e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffe6fe9b790, flags=...) at kernel/qeventloop.cpp:149
#41 0x00007fb3470b16f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffe6fe9b790, flags=...) at kernel/qeventloop.cpp:204
#42 0x00007fb3481dfbbc in QDialog::exec() () at /usr/lib64/libQtGui.so.4
#43 0x00000000006d2a8b in UMLOperation::showPropertiesDialog(QWidget*) (this=<optimized out>, parent=<optimized out>) at /usr/src/debug/umbrello-15.04.3/umbrello/operation.cpp:424
#44 0x000000000048d0ed in ClassifierListPage::slotDoubleClick(QListWidgetItem*) (this=0x13a84b0, item=0x16b8350) at /usr/src/debug/umbrello-15.04.3/umbrello/dialogs/pages/classifierlistpage.cpp:679
#45 0x00007fb3470c5f60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x1987ea0, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#46 0x00007fb348297b02 in QListWidget::itemDoubleClicked(QListWidgetItem*) () at /usr/lib64/libQtGui.so.4
#47 0x00007fb3470c5f60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=0x1987ea0, m=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3576
#48 0x00007fb348234a75 in QAbstractItemView::doubleClicked(QModelIndex const&) () at /usr/lib64/libQtGui.so.4
#49 0x00007fb34823dd66 in QAbstractItemView::mouseDoubleClickEvent(QMouseEvent*) () at /usr/lib64/libQtGui.so.4
#50 0x00007fb347d7d709 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#51 0x00007fb34812696e in QFrame::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#52 0x00007fb34823d8c3 in QAbstractItemView::viewportEvent(QEvent*) () at /usr/lib64/libQtGui.so.4
#53 0x00007fb3470b2b86 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (this=<optimized out>, receiver=0x11c92c0, event=0x7ffe6fe9c1e0) at kernel/qcoreapplication.cpp:1065
#54 0x00007fb347d29efc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#55 0x00007fb347d30b53 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#56 0x00007fb348a5c63a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#57 0x00007fb3470b2a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffe6fe9daa0, receiver=0x11c92c0, event=0x7ffe6fe9c1e0) at kernel/qcoreapplication.cpp:955
#58 0x00007fb347d301ed in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib64/libQtGui.so.4
#59 0x00007fb347da6942 in  () at /usr/lib64/libQtGui.so.4
#60 0x00007fb347da530d in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#61 0x00007fb347dcd882 in  () at /usr/lib64/libQtGui.so.4
#62 0x00007fb342ec8cc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#63 0x00007fb342ec8ef8 in  () at /usr/lib64/libglib-2.0.so.0
#64 0x00007fb342ec8f9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#65 0x00007fb3470e124e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0xc141c0, flags=...) at kernel/qeventdispatcher_glib.cpp:450
#66 0x00007fb347dcd946 in  () at /usr/lib64/libQtGui.so.4
#67 0x00007fb3470b13e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffe6fe9c920, flags=...) at kernel/qeventloop.cpp:149
#68 0x00007fb3470b16f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffe6fe9c920, flags=...) at kernel/qeventloop.cpp:204
#69 0x00007fb3481dfbbc in QDialog::exec() () at /usr/lib64/libQtGui.so.4
#70 0x000000000046e9ae in MultiPageDialogBase::exec() (this=<optimized out>) at /usr/src/debug/umbrello-15.04.3/umbrello/dialogs/multipagedialogbase.cpp:137
#71 0x000000000066963c in UMLWidget::showPropertiesDialog() (this=0x1256d60) at /usr/src/debug/umbrello-15.04.3/umbrello/widgets/umlwidget.cpp:1143
#72 0x000000000066f3ab in UMLWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent*) (this=0x1256d60, event=0x1902960) at /usr/src/debug/umbrello-15.04.3/umbrello/widgets/umlwidget.cpp:602
#73 0x00000000006e6c70 in ToolBarState::mouseDoubleClick(QGraphicsSceneMouseEvent*) (this=0x123b860, ome=0x7ffe6fe9cd20) at /usr/src/debug/umbrello-15.04.3/umbrello/toolbarstate.cpp:156
#74 0x000000000073086b in UMLScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent*) (this=0x1262130, event=0x7ffe6fe9cd20) at /usr/src/debug/umbrello-15.04.3/umbrello/umlscene.cpp:861
#75 0x00007fb348321da7 in QGraphicsScene::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#76 0x00007fb347d29f1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#77 0x00007fb347d309ec in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#78 0x00007fb348a5c63a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#79 0x00007fb3470b2a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffe6fe9daa0, receiver=0x1262130, event=0x7ffe6fe9cd20) at kernel/qcoreapplication.cpp:955
#80 0x00007fb3483386c7 in QGraphicsView::mouseDoubleClickEvent(QMouseEvent*) () at /usr/lib64/libQtGui.so.4
#81 0x00007fb347d7d709 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#82 0x00007fb34812696e in QFrame::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#83 0x00007fb34833978f in QGraphicsView::viewportEvent(QEvent*) () at /usr/lib64/libQtGui.so.4
#84 0x00007fb3470b2b86 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (this=<optimized out>, receiver=0x12907c0, event=0x7ffe6fe9d2a0) at kernel/qcoreapplication.cpp:1065
#85 0x00007fb347d29efc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#86 0x00007fb347d30b53 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#87 0x00007fb348a5c63a in KApplication::notify(QObject*, QEvent*) () at /usr/lib64/libkdeui.so.5
#88 0x00007fb3470b2a1d in QCoreApplication::notifyInternal(QObject*, QEvent*) (this=0x7ffe6fe9daa0, receiver=0x12907c0, event=0x7ffe6fe9d2a0) at kernel/qcoreapplication.cpp:955
#89 0x00007fb347d301ed in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib64/libQtGui.so.4
#90 0x00007fb347da6942 in  () at /usr/lib64/libQtGui.so.4
#91 0x00007fb347da530d in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#92 0x00007fb347dcd882 in  () at /usr/lib64/libQtGui.so.4
#93 0x00007fb342ec8cc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#94 0x00007fb342ec8ef8 in  () at /usr/lib64/libglib-2.0.so.0
#95 0x00007fb342ec8f9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
#96 0x00007fb3470e124e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0xc141c0, flags=...) at kernel/qeventdispatcher_glib.cpp:450
#97 0x00007fb347dcd946 in  () at /usr/lib64/libQtGui.so.4
#98 0x00007fb3470b13e1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffe6fe9d9d0, flags=...) at kernel/qeventloop.cpp:149
#99 0x00007fb3470b16f5 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffe6fe9d9d0, flags=...) at kernel/qeventloop.cpp:204
#100 0x00007fb3470b6ef9 in QCoreApplication::exec() () at kernel/qcoreapplication.cpp:1227
#101 0x0000000000447d53 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/umbrello-15.04.3/umbrello/main.cpp:124
Comment 6 Ralf Habacker 2015-08-14 17:53:49 UTC
(In reply to Challistobugs from comment #5)

> #6  0x00007fb346c3e510 in __dynamic_cast () at /usr/lib64/libstdc++.so.6
> #7  0x000000000057784d in CPPSourceCodeOperation::updateMethodDeclaration()
> (this=0x137a030) at /usr/src/debug/umbrello-15.04.3/umbrello/codegenerators/cpp/
> cppsourcecodeoperation.cpp:49

Thanks. The crash happens using new code generator. A workaround is to disable "Use new codegenerator..." in main page of Umbrello settings.
It would be nice to get a xmi test case to be able to find out the reason for this crash.
Comment 7 Oliver Kellogg 2015-08-14 21:54:39 UTC
(In reply to Challistobugs from comment #2)
> [...]
> I was changing the return type of an operation in a class.

Hmm let's see...

CodeMethodBlock inherits from OwnedCodeBlock,
    class CodeMethodBlock : public OwnedCodeBlock, [...]
and declares
    public slots:
        virtual void syncToParent();
However, the actual "connect" of this syncToParent() is not done in CodeMethodBlock but rather in the parent class OwnedCodeBlock,
    void OwnedCodeBlock::initFields(UMLObject * parent)
    {
        [...]
        connect(m_parentObject, SIGNAL(modified()), this, SLOT(syncToParent()));
    }
The problem is that OwnedCodeBlock::initFields() is called from within the OwnedCodeBlock constructor,
    OwnedCodeBlock::OwnedCodeBlock (UMLObject * parent)
        : QObject (parent)
    {
        setObjectName(QLatin1String("anOwnedCodeBlock"));
        initFields(parent);
    }
which itself is called by the CodeMethodBlock constructor,
    CodeMethodBlock::CodeMethodBlock(ClassifierCodeDocument * doc, UMLObject * parentObj,
                                            const QString & body, const QString & comment)
      : OwnedCodeBlock (parentObj), [...]
which means that the connect() is done on a CodeMethodBlock object which itself is not yet fully constructed: vtbl_ptr not yet initialized, dynamic method dispatch to child class not possible.
By the way, the new code generators had this design error all over the place.
Years ago, I tried to fix the many occurrences of this pattern but gave up at some point.
Comment 8 Ralf Habacker 2015-08-15 09:08:33 UTC
Git commit 679324f2a0354c463163c4f18f5c2175d175be4b by Ralf Habacker.
Committed on 15/08/2015 at 08:59.
Pushed by habacker into branch 'Applications/15.08'.

Enable unstable new code generators only in master branch because of major design issue.

The reason is mentioned at bug 351103: "... which means that the connect()
is done on a CodeMethodBlock object which itself is not yet fully constructed:
 vtbl_ptr not yet initialized, dynamic method dispatch to child class not possible.
... the new code generators had this design error all over the place."

M  +1    -0    CMakeLists.txt
M  +4    -2    umbrello/dialogs/pages/generaloptionpage.cpp
M  +2    -0    umbrello/uml.cpp

http://commits.kde.org/umbrello/679324f2a0354c463163c4f18f5c2175d175be4b
Comment 9 Ralf Habacker 2015-08-17 08:28:49 UTC
(In reply to Oliver Kellogg from comment #7)
> (In reply to Challistobugs from comment #2)
> > [...]
> > I was changing the return type of an operation in a class.
> 
> Hmm let's see...
> 
> CodeMethodBlock inherits from OwnedCodeBlock,
>     class CodeMethodBlock : public OwnedCodeBlock, [...]
> and declares
>     public slots:
>         virtual void syncToParent();
> However, the actual "connect" of this syncToParent() is not done in
> CodeMethodBlock but rather in the parent class OwnedCodeBlock,
>     void OwnedCodeBlock::initFields(UMLObject * parent)
>     {
>         [...]
>         connect(m_parentObject, SIGNAL(modified()), this,
> SLOT(syncToParent()));
>     }
> The problem is that OwnedCodeBlock::initFields() is called from within the
> OwnedCodeBlock constructor,
>     OwnedCodeBlock::OwnedCodeBlock (UMLObject * parent)
>         : QObject (parent)
>     {
>         setObjectName(QLatin1String("anOwnedCodeBlock"));
>         initFields(parent);
>     }
> which itself is called by the CodeMethodBlock constructor,
>     CodeMethodBlock::CodeMethodBlock(ClassifierCodeDocument * doc, UMLObject
> * parentObj,
>                                             const QString & body, const
> QString & comment)
>       : OwnedCodeBlock (parentObj), [...]
> which means that the connect() is done on a CodeMethodBlock object which
> itself is not yet fully constructed: vtbl_ptr not yet initialized, dynamic
> method dispatch to child class not possible.
> By the way, the new code generators had this design error all over the place.
> Years ago, I tried to fix the many occurrences of this pattern but gave up
> at some point.
Time to switch to templated base codegenerators using http://www.grantlee.org/apidox/ as mentioned by Sandros at umbrello development list ?
Comment 10 Ralf Habacker 2015-08-19 14:21:27 UTC
Git commit b94ab9061eefe2bc232f21a3b4af3136aed720d6 by Ralf Habacker.
Committed on 19/08/2015 at 14:04.
Pushed by habacker into branch 'Applications/15.08'.

Split out advanced code generator related stuff from class CodeGenerator into new class AdvancedCodeGenerator.

For real code generators, we now have SimpleCodeGenerator and AdvancedCodeGenerator,
which makes it easier to maintain or drop related stuff.

M  +1    -0    umbrello/CMakeLists.txt
A  +121  -0    umbrello/codegenerators/advancedcodegenerator.cpp     [License: GPL (v2+)]
A  +41   -0    umbrello/codegenerators/advancedcodegenerator.h     [License: GPL (v2+)]
M  +0    -110  umbrello/codegenerators/codegenerator.cpp
M  +2    -35   umbrello/codegenerators/codegenerator.h
M  +0    -4    umbrello/codegenerators/codegenfactory.cpp
M  +3    -2    umbrello/codegenerators/cpp/cppcodegenerator.cpp
M  +2    -2    umbrello/codegenerators/cpp/cppcodegenerator.h
M  +2    -1    umbrello/codegenerators/d/dcodegenerator.cpp
M  +2    -2    umbrello/codegenerators/d/dcodegenerator.h
M  +2    -1    umbrello/codegenerators/java/javacodegenerator.cpp
M  +2    -2    umbrello/codegenerators/java/javacodegenerator.h
M  +2    -1    umbrello/codegenerators/ruby/rubycodegenerator.cpp
M  +2    -2    umbrello/codegenerators/ruby/rubycodegenerator.h
M  +0    -12   umbrello/codegenerators/simplecodegenerator.cpp
M  +2    -7    umbrello/codegenerators/simplecodegenerator.h
M  +5    -4    umbrello/uml.cpp

http://commits.kde.org/umbrello/b94ab9061eefe2bc232f21a3b4af3136aed720d6
Comment 11 Ralf Habacker 2015-08-19 14:21:27 UTC
Git commit 2b0513d7da635849a7446ee54040e6f0f83c0d3a by Ralf Habacker.
Committed on 19/08/2015 at 14:07.
Pushed by habacker into branch 'Applications/15.08'.

Doc cleanup of class SimpleCodeGenerator and CodeGenerator.

M  +14   -37   umbrello/codegenerators/codegenerator.h
M  +6    -0    umbrello/codegenerators/simplecodegenerator.h

http://commits.kde.org/umbrello/2b0513d7da635849a7446ee54040e6f0f83c0d3a
Comment 12 Ralf Habacker 2015-08-19 21:35:57 UTC
Git commit b1c09fe3968082bfd86e8a590a0fad75b671e1c5 by Ralf Habacker.
Committed on 19/08/2015 at 21:34.
Pushed by habacker into branch 'Applications/15.08'.

Move code generator related files (codeaccessormethod.cpp and classifiercodedocument.cpp) to codegenerator subdirectory.

M  +2    -2    umbrello/CMakeLists.txt
R  +0    -0    umbrello/codegenerators/classifiercodedocument.cpp [from: umbrello/classifiercodedocument.cpp - 100% similarity]
R  +0    -0    umbrello/codegenerators/classifiercodedocument.h [from: umbrello/classifiercodedocument.h - 100% similarity]
R  +0    -0    umbrello/codegenerators/codeaccessormethod.cpp [from: umbrello/codeaccessormethod.cpp - 100% similarity]
R  +0    -0    umbrello/codegenerators/codeaccessormethod.h [from: umbrello/codeaccessormethod.h - 100% similarity]

http://commits.kde.org/umbrello/b1c09fe3968082bfd86e8a590a0fad75b671e1c5
Comment 13 Ralf Habacker 2015-09-05 22:38:52 UTC
*** Bug 346896 has been marked as a duplicate of this bug. ***
Comment 14 Ralf Habacker 2015-09-21 09:11:02 UTC
New code generator has been disabled in stable releases to avoid further crash bugs.