[英]Live555 RTSPServer object destroyed improperly or the library bug?
我在銷毀RTSPServer
對象時遇到問題:應用程序崩潰並出現SIGSEGV
錯誤。 但是,如果我不觸及所有其他對象,則可能僅銷毀RTSPServer
對象。 這是庫錯誤還是我做錯了什么?
他們最近的live555更改日志說:
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.)
這是我的析構函數:
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;
}
}
現在可以在這里找到我的問題的答案: http : //lists.live555.com/pipermail/live-devel/2015-June/019490.html
回復文字:
在我已經刪除了
ServerMediaSession*
對象向量(當然,也使用Medium::close()
)之后刪除RTSPServer
對象時,我在析構函數中使用Medium::close()
時RTSPServer
。首先,請確保您使用的是最新版本的軟件(在2015.06.24版中修復了與刪除
RTSPServer's
相關的錯誤)。其次,請注意,一旦將
ServerMediaSession
對象添加到RTSPServer
,就不能通過調用Medium::close()
刪除ServerMediaSession
對象。 相反,你必須使用GenericMediaServer::deleteServerMediaSession()
GenericMediaServer
是基類的RTSPServer
),從而使RTSPServer
被告知ServerMediaSession
對象被刪除。最后,但是,請注意,您不必刪除
ServerMediaSession
對象在刪除之前RTSPServer
,因為RTSPServer
析構函數將自動刪除任何ServerMediaSession
(和ClientConnection
和ClientSession
)對象所管理。 相反,您可以在RTSPServer
對象上調用Medium::close()
。Ross Finlayson,Live Networks,Inc。, http://www.live555.com/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.