diff -r 28479eeba3fb -r 2b6718f05bdb bluetooth/btstack/avdtp/avdtpStreamStates.cpp --- a/bluetooth/btstack/avdtp/avdtpStreamStates.cpp Tue Feb 02 01:12:20 2010 +0200 +++ b/bluetooth/btstack/avdtp/avdtpStreamStates.cpp Fri Feb 19 23:56:55 2010 +0200 @@ -909,12 +909,16 @@ // now we kick TCs into life if (aResult) { - // can return to Idle, user could try this operation again - // the way Open works means we have transport sessions interested in result of this - // they need to tell their sockets that their connects failed - - ChangeState(aStream, CAVStreamStateFactory::EStreamStateIdle); - + // late reply or connection problem, abort + + CSignallingChannel* sigch = aStream.iProtocol.FindSignallingChannel(aStream.iRemoteAddress.BTAddr()); + // should always have sigch here + __ASSERT_DEBUG(sigch, PanicInState(EAvdtpSignallingChannelShouldExist)); + if (sigch) + { + sigch->SendAbort(aStream, aStream.RemoteSEID()); + } + // no need to tell signalling session as Opening is not available to RGavdp // Opening is performed when the necessary sockets are created and connected in a stream aStream.NotifyUserPlaneTransportSessionsError(NULL, aResult);