[Live-devel] May createNewSomething methods return NULL?
Helmut Grohne
h.grohne at intenta.de
Wed Sep 7 06:10:23 PDT 2016
Hi,
I was wondering whether createNewSomething methods may return NULL. The
library itself appears to be inconsistent here as a quick survey of
random functions turned out:
Some invocations are not checked for whether a createNew returns NULL.
* OnDemandServerMediaSubsession:getStreamParameters does not check createNewStreamSource for NULL result.
* ClientTrickPlayState::updateStateOnScaleChange does not check MPEG2TransportStreamFromESSource::createNew for NULL result.
* RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET does not check TCPStreamSink::createNew for NULL result.
* GenericMediaServer::createNewClientSessionWithId does not check createNewClientSession for NULL result.
But other invocations are checked:
* OnDemandServerMediaSubsession::sdpLines checks the result of createNewStreamSource and createNewRTPSink.
* OnDemandServerMediaSubsession:getStreamParameters checks the result of createNewRTPSink.
* MediaSession::initializeWithSDP checks the result of createNewMediaSubsession.
* MediaSubsession::initiate checks the result of RTCPInstance::createNew.
* H265VideoFileServerMediaSubsession::createNewStreamSource checks the result of ByteStreamFileSource::createNew.
Another interesting aspect is which of these actually can return NULL
(as C++ new cannot return NULL and throws std::bad_alloc instead). The
following functions have some path that yields a NULL return:
* AVIFileSink::createNew
* ByteStreamMemoryBufferSource::createNew
* ADUFromMP3Source::createNew
* MP3FromADUSource::createNew
* MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource
* MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink
* MPEG2TransportStreamIndexFile::createNew
* ByteStreamFileSource::createNew
* MPEG2TransportFileServerMediaSubsession
* RTSPServerSupportingHTTPStreaming::createNew
* MP3Transcoder::createNew
* H265VideoFileServerMediaSubsession::createNewStreamSource
In particular, some implementations of createNewStreamSource appear to
potentiall return NULL, but not all consumers check for that.
I am particularly interested in the expected semantics for
GenericMediaServer::createNewClientSession as it currently is not
checked by GenericMediaServer::createNewClientSessionWithId. Thus we can
assume that the latter also never returns NULL, but consumers of it do
check for NULL. Either those checks are unnecessary or the result of
GenericMediaServer::createNewClientSession should indeed be checked.
So when I ask whether createNewSomething may return NULL, I ask for the
intention. I already know that the practical answer is "maybe".
Helmut
More information about the live-devel
mailing list