-rw-r--r-- | noncore/net/opietooth/lib/manager.cc | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/noncore/net/opietooth/lib/manager.cc b/noncore/net/opietooth/lib/manager.cc index 83accf7..7311484 100644 --- a/noncore/net/opietooth/lib/manager.cc +++ b/noncore/net/opietooth/lib/manager.cc @@ -58,20 +58,21 @@ void Manager::isAvailable( Device* /*dev*/ ){ } void Manager::searchDevices( const QString& device ){ odebug << "Manager: search devices" << oendl; - OProcess* hcitool = new OProcess(); - hcitool->setName( device.isEmpty() ? "hci0" : device.latin1() ); - *hcitool << "hcitool" << "scan"; - connect( hcitool, SIGNAL(processExited(Opie::Core::OProcess*) ) , + m_hcitool = new OProcess(); + m_hcitool->setName( device.isEmpty() ? "hci0" : device.latin1() ); + *m_hcitool << "hcitool" << "scan"; + connect( m_hcitool, SIGNAL(processExited(Opie::Core::OProcess*) ) , this, SLOT(slotHCIExited(Opie::Core::OProcess* ) ) ); - connect( hcitool, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), + connect( m_hcitool, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), this, SLOT(slotHCIOut(Opie::Core::OProcess*, char*, int ) ) ); - if (!hcitool->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { + if (!m_hcitool->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { odebug << "Manager: could not start" << oendl; RemoteDevice::ValueList list; emit foundDevices( device, list ); - delete hcitool; + delete m_hcitool; + m_hcitool = 0; } } void Manager::searchDevices(Device* /*d*/ ){ @@ -104,9 +105,9 @@ void Manager::removeServices( const QStringList& list){ for (it = list.begin(); it != list.end(); ++it ) removeService( (*it) ); } void Manager::searchServices( const QString& remDevice ){ - OProcess *m_sdp =new OProcess(); + m_sdp =new OProcess(); *m_sdp << "sdptool" << "browse" << remDevice; m_sdp->setName( remDevice.latin1() ); odebug << "Manager: search Services for " << remDevice.latin1() << oendl; connect(m_sdp, SIGNAL(processExited(Opie::Core::OProcess*) ), @@ -115,8 +116,9 @@ void Manager::searchServices( const QString& remDevice ){ this, SLOT(slotSDPOut(Opie::Core::OProcess*, char*, int) ) ); if (!m_sdp->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { odebug << "Manager: could not start sdptool" << oendl; delete m_sdp; + m_sdp = 0; Services::ValueList list; emit foundServices( remDevice, list ); } } @@ -164,8 +166,10 @@ void Manager::slotSDPExited( OProcess* proc) m_out.remove( it ); } } emit foundServices( proc->name(), list ); + if (proc == m_sdp) + m_sdp = 0; delete proc; } Services::ValueList Manager::parseSDPOutput( const QString& out ) { Services::ValueList list; @@ -187,8 +191,10 @@ void Manager::slotHCIExited(OProcess* proc ) { m_devices.remove( it ); } } emit foundDevices( proc->name(), list ); + if (proc == m_hcitool) + m_hcitool = 0; delete proc; } void Manager::slotHCIOut(OProcess* proc, char* ch, int len) { QCString str( ch, len+1 ); |