Hello, Ross Finlayson and LIVE555 support!

First of all, thanks for such a great library. I am developing an application 
for streaming cv::Mat over RTSP

I have a problem using Medium::close() in my destructor when deleting an 
RTSPServer object after I have already deleted ServerMediaSession* objects 
vector (of course, using Medium::close() too). 
The app crashes with SIGSEGV error. 

On the other side, destroying RTSPServer object will succeed if I put it right 
before destroying ServerMediaSession* objects vector, but this time 
Medium::close() for ServerMediaSession* will crash my app again with SIGSEGV 
error. 
What's more interesting: in this case I am still able to use 
ServerMediaSession* object even after destroying the RTSPServer using 
Medium::close(), for example, calling the mSms[i] object by method like this: 
  mSms[0]->deleteAllSubsessions() will not cause the crash. 
It means that mSms[0] object still exists after Medium::close(mRTSPServer), but 
Medium::close(mSms[0]) is not able to destroy it properly, without SIGSEGV 
errors.

It appears that I have to use Medium::close() either RTSPServer object or a 
ServerMediaSession* objects vector. Why? Is this a bug or am I doing something 
wrong?  

Here is my destructor code:
-------------------------------------------------------------------------------------------------------------------------------
RTSPServerH264::~RTSPServerH264()
{
    LOG(INFO) << "RTSP server close: destroying objects";

    if (mSms.size() > 0)
    {
        LOG(INFO) << "destroying: Server Media Subsession vector";
        for (ServerMediaSession* s : mSms)
        {
            s->deleteAllSubsessions();
            Medium::close(s);
        }
        mSms.clear();
        mLiveSubsession.clear();
    }

    if (mRTSPServer)
    {
        LOG(INFO) << "destroying: RTSPServer";
        // BUG: Destroying RTSPServer object crashes the whole application!
        Medium::close(mRTSPServer);
    }

    if (mUsageEnvironment)
    {
        LOG(INFO) << "destroying: Usage Environment";
        mUsageEnvironment->reclaim();
    }

    if (mTaskScheduler)
    {
        LOG(INFO) << "destroying: Task Scheduler";
        delete mTaskScheduler;
    }
}
-------------------------------------------------------------------------------------------------------------------------------

Earlier, I published this issue on stackoverflow but wasn't lucky to get any 
response:
http://stackoverflow.com/questions/31006804/live555-rtspserver-object-destroyed-improperly-or-the-library-bug
I've read about the RTSPServer bug from the changelog.txt before, that's why 
I've tested using the latest version of LIVE555 (on Ubuntu 14.04).

-------------------------------------------------------------------------------------------------------------------------------
2015.05.12:
- Updated the previous revision to change the order in which fields are deleted 
in the
  "RTSPServer" destructor, to avoid a possible crash if "RTSPServer" objects 
are deleted.
  (Thanks to ChaSeop Im for noting the problem.)
-------------------------------------------------------------------------------------------------------------------------------

Best Regards,
Alexander Dunaevsky
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to