>>> 2. Also I have seen possible ServerMediaSession object relations bug >>> in RTSPServer::addServerMediaSession/RTSPServer::removeServerMediaSession >>> methods. >>> Method addServerMediaSession adds a ServerMediaSession object to >>> hashmap fServerMediaSessions and call removeServerMediaSession on >>> ServerMediaSession object previously set in the hashmap (if both >>> objects have same stream name). Method removeServerMediaSession >>> removes from the hashmap new ServerMediaSession object just added by >>> addServerMediaSession. >> >> Yes, this is a bug. It will get fixed in a future release. > > I'm sorry, but I fail to see how this was a bug. Seems to me that > RTSPServer::addServerMediaSession was removing an existing ServerMediaSession > with the same name as the one being created, if any.
No, the old code was doing (when implementing "RTSPServer::addServerMediaSession()"): ServerMediaSession* existingSession = (ServerMediaSession*)(fServerMediaSessions->Add(sessionName, (void*)serverMediaSession)); removeServerMediaSession(existingSession); // if any which was a bug, because - if "existingSession" was not NULL, then the call to removeServerMediaSession(existingSession); // if any happened to remove - from the hash table - the *new* "serverMediaSession" that had just been added - because of the way that RTSPServer::removeServerMediaSession(ServerMediaSession* existingSession) is implemented by calling Remove(existingSession->streamName()); on the internal hash table. The new code does: removeServerMediaSession(sessionName); // in case an existing "ServerMediaSession" with this name already exists fServerMediaSessions->Add(sessionName, (void*)serverMediaSession); which is correct, except for the fact that void RTSPServer::removeServerMediaSession(char const* sessionName) is implemented by calling removeServerMediaSession(lookupServerMediaSession(sessionName)); i.e., by calling the "lookupServerMediaSession()" *virtual function*. That's a bug. The code should just be doing a hash table lookup here; not calling the "lookupServerMediaSession()" virtual function. I've now installed a new version (2012.05.17) of the code that fixes this. 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