Skip to content

Commit

Permalink
don't hang with qt 4.5
Browse files Browse the repository at this point in the history
git-svn-id: http://delta.affinix.com/svn/trunk/iris@544 ac7a513c-5e3a-0410-af42-968c3ac6e7dc
  • Loading branch information
Justin Karneges committed Apr 16, 2009
1 parent 0d44dbf commit 30243a8
Showing 1 changed file with 37 additions and 11 deletions.
48 changes: 37 additions & 11 deletions src/irisnet/corelib/jdnsshared.cpp
Expand Up @@ -257,6 +257,35 @@ class JDnsShutdownAgent : public QObject
void started();
};

class JDnsShutdownWorker : public QObject
{
Q_OBJECT
public:
QList<JDnsShared*> list;

JDnsShutdownWorker(const QList<JDnsShared*> &_list) : QObject(0), list(_list)
{
foreach(JDnsShared *i, list)
{
connect(i, SIGNAL(shutdownFinished()), SLOT(jdns_shutdownFinished()));
i->shutdown(); // MUST support DOR-DS, and it does
}
}

signals:
void finished();

private slots:
void jdns_shutdownFinished()
{
JDnsShared *i = (JDnsShared *)sender();
list.removeAll(i);
delete i;
if(list.isEmpty())
emit finished();
}
};

class JDnsShutdown : public QThread
{
Q_OBJECT
Expand All @@ -265,6 +294,7 @@ class JDnsShutdown : public QThread
QWaitCondition w;
QList<JDnsShared*> list;
JDnsShutdownAgent *agent;
JDnsShutdownWorker *worker;
int phase;

void waitForShutdown(const QList<JDnsShared*> &_list)
Expand Down Expand Up @@ -308,21 +338,17 @@ private slots:
}
else
{
foreach(JDnsShared *i, list)
{
connect(i, SIGNAL(shutdownFinished()), SLOT(jdns_shutdownFinished()), Qt::DirectConnection);
i->shutdown();
}
worker = new JDnsShutdownWorker(list);
connect(worker, SIGNAL(finished()), SLOT(worker_finished()), Qt::DirectConnection);
}
}

void jdns_shutdownFinished()
void worker_finished()
{
JDnsShared *i = (JDnsShared *)sender();
delete i;
list.removeAll(i);
if(list.isEmpty())
quit();
delete worker;
worker = 0;

quit();
}
};

Expand Down

0 comments on commit 30243a8

Please sign in to comment.