Yes. Something like this: 1) ~ProxyServerMediaSession 2) ~ServerMediaSession //(at this point fProxyRTSPClient is already deleted) 3) deleteAllSubsessions() 4) Medium::close(fSubsessionsHead) ... 5) delete medium 6) ~ProxyServerMediaSubsession 7) envir() << *this << "::~ProxyServerMediaSubsession()\n" 8) psmss.url() //(psmss is ProxyServerMediaSubsession) 9) char const* url() const { return ((ProxyServerMediaSession*)fParentSession)->url(); } //here is access that must not happened 10) return fProxyRTSPClient == NULL ? NULL : fProxyRTSPClient->url(); //fProxyRTSPClient is not null but deleted
I agree that my solution is not very good, but at the moment I don't know how to fix it in some other way пт, 27 вер. 2024 р. о 18:33 Ross Finlayson <finlay...@live555.com> пише: > Andrey, > > Thank you for the bug report. > > I agree that there is probably a bug here, but I don’t like your proposed > solution. > > If a “ProxyServerMediaSession” has been deleted, then nobody should be > calling “url()” on it. > > I.e., the problem is not that code is trying to access an already-deleted > “ProxyRTSPClient”, but that it is trying to access an already-deleted > “ProxyServerMediaSession”. > > Can you identify where, in the code, someone is trying to call “url()” > (probably by calling “operator<<()”) on a “ProxyServerMediaSession” after > it has already been deleted? > > > Ross Finlayson > Live Networks, Inc. > http://www.live555.com/ > > > _______________________________________________ > live-devel mailing list > live-devel@lists.live555.com > http://lists.live555.com/mailman/listinfo/live-devel >
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel