Fixes #410 - away log (you'll find it in the views menu)
[quassel.git] / src / core / sessionthread.cpp
index 6a17bd9..c29d1ff 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel IRC Team                         *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -36,9 +36,12 @@ SessionThread::SessionThread(UserId uid, bool restoreState, QObject *parent)
 }
 
 SessionThread::~SessionThread() {
-  // shut down thread gracefully
-  quit();
-  wait();
+  if(_session) {
+    _session->setParent(0);
+    _session->moveToThread(thread());
+    _session->deleteLater();
+    _session = 0;
+  }
 }
 
 CoreSession *SessionThread::session() {
@@ -103,5 +106,13 @@ void SessionThread::run() {
   emit initialized();
   exec();
   delete _session;
+  _session = 0;
 }
 
+void SessionThread::stopSession() {
+  if(_session) {
+    connect(_session, SIGNAL(destroyed()), this, SLOT(quit()));
+    _session->deleteLater();
+    _session = 0;
+  }
+}