Bug 113611 - SIGSEGV after telescope not found
Summary: SIGSEGV after telescope not found
Status: RESOLVED FIXED
Alias: None
Product: kstars
Classification: Applications
Component: general (show other bugs)
Version: 1.1
Platform: Debian testing Linux
: NOR crash
Target Milestone: ---
Assignee: kstars
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-09-30 10:45 UTC by Oliver Grimm
Modified: 2005-10-01 04:23 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Oliver Grimm 2005-09-30 10:45:38 UTC
Version:           1.1 (using KDE KDE 3.4.1)
Installed from:    Debian testing/unstable Packages
OS:                Linux

To reproduce this crash do

- start KStars
- right click an arbitrary star
- choose "add to watch list" from RMB menu
- choose extra -> "watch list" from the main menu
- left click the new entry
- click "application area" (2nd button)
- get a message "no active telescope found"
- click OK
- click at the "remove" button
- close the window by clicking the "close" button at the upper right corner of the window

You'll get a SIGSEGV.
Maybe this one is related to bug 105214.

KCrashHandler log:

`system-supplied DSO at 0xffffe000' has disappeared; keeping its symbols.
(no debugging symbols found)
...
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
[New Thread -1231677760 (LWP 7411)]
...
#3  0x082324d2 in KPlotWidget::setDefaultPadding ()
#4  0xb79e19c9 in KDialogBase::qt_invoke () from /usr/lib/libkdeui.so.4
#5  0x08232b90 in KPlotWidget::setDefaultPadding ()
#6  0xb709571c in QObject::activate_signal () from /usr/lib/libqt-mt.so.3
#7  0xb7095544 in QObject::activate_signal () from /usr/lib/libqt-mt.so.3
#8  0xb73db82e in QButton::clicked () from /usr/lib/libqt-mt.so.3
#9  0xb71282cd in QButton::animateTimeout () from /usr/lib/libqt-mt.so.3
#10 0xb73db948 in QButton::qt_invoke () from /usr/lib/libqt-mt.so.3
#11 0xb73ead54 in QPushButton::qt_invoke () from /usr/lib/libqt-mt.so.3
#12 0xb7a50003 in KPushButton::qt_invoke () from /usr/lib/libkdeui.so.4
#13 0xb79da44d in KDialogBaseButton::qt_invoke () from /usr/lib/libkdeui.so.4
#14 0xb709571c in QObject::activate_signal () from /usr/lib/libqt-mt.so.3
#15 0xb73d462a in QSignal::signal () from /usr/lib/libqt-mt.so.3
#16 0xb70af91d in QSignal::activate () from /usr/lib/libqt-mt.so.3
#17 0xb70b7253 in QSingleShotTimer::event () from /usr/lib/libqt-mt.so.3
#18 0xb7038e1f in QApplication::internalNotify () from /usr/lib/libqt-mt.so.3
#19 0xb703841e in QApplication::notify () from /usr/lib/libqt-mt.so.3
#20 0xb7674ac5 in KApplication::notify () from /usr/lib/libkdecore.so.4
#21 0xb7028645 in QEventLoop::activateTimers () from /usr/lib/libqt-mt.so.3
#22 0xb6fe1cfb in QEventLoop::processEvents () from /usr/lib/libqt-mt.so.3
#23 0xb704b1d8 in QEventLoop::enterLoop () from /usr/lib/libqt-mt.so.3
#24 0xb704b088 in QEventLoop::exec () from /usr/lib/libqt-mt.so.3
#25 0xb7039071 in QApplication::exec () from /usr/lib/libqt-mt.so.3
#26 0x081150ad in KDoubleNumInput::metaObject ()
#27 0xb6999ec0 in __libc_start_main () from /lib/tls/libc.so.6
#28 0x0806cd61 in ?? ()
Comment 1 Jasem Mutlaq 2005-09-30 14:50:19 UTC
I can't reproduce this crash.

What's your hardware spec?
Comment 2 Oliver Grimm 2005-09-30 15:22:15 UTC
There was NO telescope attached to the system nor any other astro device. Hardware specs here are i686, 2.6 GHz, 512 MB RAM.

What else do you need to know?
Comment 3 kstars 2005-09-30 16:46:05 UTC
Hi,

Thanks for the report.  I am also unable to reproduce the crash following 
these steps.  It's possible that the bug has been fixed since 3.4.1.  You 
could try KDE-3.5-beta1 or if you don't want to run the whole desktop from 
beta1, you can get a recent KStars SVN snapshot here:
http://www.30doradus.org/kstars/

Let us know if you try it.

Jason

On Friday 30 September 2005 01:45, Oliver Grimm wrote:
[bugs.kde.org quoted mail]
Comment 4 kstars 2005-09-30 16:57:07 UTC
More information:  I still have KStars from KDE-3.4.1 on disk, so I tried that, and I still can't reproduce the crash following your steps.

However, I noticed your backtrace contains KPlotWidget, which should not be called from the Observing List (or "watch list" in your localization?).  The only way you could get such a backtrace from the Observing List is if you opened the "Altitude vs Time" tool.

So, I tried following your steps, except I clicked on "Alt vs. Time" instead of "Remove".  This produces a crash under 3.4.1, but not under the 3.5 SVN code.  I'll look into patching it, because I've heard there's actually going to be a 3.4.3 release.

Thansk again.
Comment 5 kstars 2005-10-01 04:23:43 UTC
SVN commit 465866 by harris:

Fixing BR #113611 (SIGSEGV in Observing List tool).

Added a "SkyObject *oCurrent" member to keep track of the 
currently-selected object.  THis had been fixed in the 3.5 branch 
already, but I didn't backport because I didn't realize there would be a 
3.4.3 release.

Also updated version number in the 3.4 branch to to 1.1.3 for the 
kde-3.4.3 release.

BUG: 113611



 M  +1 -1      main.cpp  
 M  +21 -17    tools/observinglist.cpp  
 M  +1 -1      tools/observinglist.h  


--- branches/KDE/3.4/kdeedu/kstars/kstars/main.cpp #465865:465866
@@ -29,7 +29,7 @@
 #include "ksnumbers.h"
 #include "Options.h"
 
-#define KSTARS_VERSION "1.1.1"
+#define KSTARS_VERSION "1.1.3"
 
 static const char description[] =
 	I18N_NOOP("Desktop Planetarium");
--- branches/KDE/3.4/kdeedu/kstars/kstars/tools/observinglist.cpp #465865:465866
@@ -43,7 +43,7 @@
 
 ObservingList::ObservingList( KStars *_ks, QWidget* parent )
 		: KDialogBase( KDialogBase::Plain, i18n( "Observing List" ), 
-				Close, Close, parent, "observinglist", false ), ks( _ks ), LogObject(0), noNameStars(0)
+				Close, Close, parent, "observinglist", false ), ks( _ks ), LogObject(0), oCurrent(0), noNameStars(0)
 {
 	QFrame *page = plainPage();
 //	setMainWidget( page );
@@ -160,12 +160,10 @@
 }
 
 void ObservingList::slotNewSelection() {
-	//DEBUG
-	kdDebug() << "selected item changed" << endl;
-
 	//Construct list of selected objects
 	SelectedObjects.clear();
 	QListViewItemIterator it( ui->table, QListViewItemIterator::Selected ); //loop over selected items
+
 	while ( it.current() ) {
 		for ( SkyObject *o = obsList.first(); o; o = obsList.next() ) {
 			if ( it.current()->text(0) == i18n("star") ) {
@@ -185,7 +183,6 @@
 	//Enable widgets when one object selected
 	if ( SelectedObjects.count() == 1 ) {
 		QString newName( SelectedObjects.first()->translatedName() );
-		QString oldName( obsList.current()->translatedName() );
 		
 		//Enable buttons
 		ui->CenterButton->setEnabled( true );
@@ -195,7 +192,7 @@
 		ui->RemoveButton->setEnabled( true );
 		
 		//Find the selected object in the obsList,
-		//then break the loop.  Now obsList.current()
+		//then break the loop.  Now oCurrent
 		//points to the new selected object (until now it was the previous object)
 		bool found( false );
 		for ( SkyObject* o = obsList.first(); o; o = obsList.next() ) {
@@ -231,6 +228,11 @@
 			ui->NotesEdit->setEnabled( false );
 		}
 
+		//This shouldn't be necessary.  For some reason, obsList.current() 
+		//is valid here, but in subsequent functions (such as slotCenterObject) 
+		//called *right after* this one, obsList.current()==NULL.  No idea why.
+		oCurrent = obsList.current();
+
 	} else if ( SelectedObjects.count() == 0 ) {
 		//Disable buttons
 		ui->CenterButton->setEnabled( false );
@@ -240,7 +242,8 @@
 		ui->RemoveButton->setEnabled( false );
 		ui->NotesLabel->setEnabled( false );
 		ui->NotesEdit->setEnabled( false );
-		
+		oCurrent = 0;
+
 		//Clear the user log text box.
 		saveCurrentUserLog();
 	} else { //more than one object selected.
@@ -251,16 +254,17 @@
 		ui->RemoveButton->setEnabled( true );
 		ui->NotesLabel->setEnabled( false );
 		ui->NotesEdit->setEnabled( false );
-		
+		oCurrent = 0;
+
 		//Clear the user log text box.
 		saveCurrentUserLog();
 	}
 }
 
 void ObservingList::slotCenterObject() {
-	if ( obsList.current() ) {
-		ks->map()->setClickedObject( obsList.current() );
-		ks->map()->setClickedPoint( obsList.current() );
+	if ( oCurrent ) {
+		ks->map()->setClickedObject( oCurrent );
+		ks->map()->setClickedPoint( oCurrent );
 		ks->map()->slotCenter();
 	}
 }
@@ -274,7 +278,7 @@
   bool useJ2000( false);
   SkyPoint sp;
   
-  if (obsList.current() == NULL)
+  if (oCurrent == NULL)
     return;
   
   // Find the first device with EQUATORIAL_EOD_COORD or EQUATORIAL_COORD and with SLEW element
@@ -315,7 +319,7 @@
        
        onSet->activateSwitch("SLEW");
        
-       sp.set (obsList.current()->ra(), obsList.current()->dec());
+       sp.set (oCurrent->ra(), oCurrent->dec());
        
        if (useJ2000)
 	 sp.apparentCoord(ks->data()->ut().djd(), (long double) J2000);
@@ -338,8 +342,8 @@
 //FIXME: This will open multiple Detail windows for each object;
 //Should have one window whose target object changes with selection
 void ObservingList::slotDetails() {
-	if ( obsList.current() ) {
-		DetailDialog dd( obsList.current(), ks->data()->lt(), ks->geo(), ks );
+	if ( oCurrent ) {
+		DetailDialog dd( oCurrent, ks->data()->lt(), ks->geo(), ks );
 		dd.exec();
 	}
 }
@@ -359,8 +363,8 @@
 void ObservingList::slotClose() {
 	//Save the current User log text
 	if ( ! ui->NotesEdit->text().isEmpty() && ui->NotesEdit->text() 
-					!= i18n("Record here observation logs and/or data on %1.").arg( obsList.current()->name()) ) {
-		obsList.current()->saveUserLog( ui->NotesEdit->text() );
+					!= i18n("Record here observation logs and/or data on %1.").arg( oCurrent->name()) ) {
+		oCurrent->saveUserLog( ui->NotesEdit->text() );
 	}
 	
 	hide();
--- branches/KDE/3.4/kdeedu/kstars/kstars/tools/observinglist.h #465865:465866
@@ -125,7 +125,7 @@
 	ObservingListUI *ui;
 	QPtrList<SkyObject> obsList;
 	QPtrList<SkyObject> SelectedObjects;
-	SkyObject *LogObject;
+	SkyObject *LogObject, *oCurrent;
 	uint noNameStars;
 };