hankun

fix the bug: when trying to push same stream more than twice, to play it through…

… http-flv will cause a core dump(#666)
... ... @@ -78,6 +78,17 @@ SrsStreamCache::~SrsStreamCache()
srs_freep(req);
}
int SrsStreamCache::update(SrsSource* s, SrsRequest* r)
{
int ret = ERROR_SUCCESS;
srs_freep(req);
req = r->copy();
source = s;
return ret;
}
int SrsStreamCache::start()
{
return pthread->start();
... ... @@ -451,6 +462,17 @@ SrsLiveStream::~SrsLiveStream()
srs_freep(req);
}
int SrsLiveStream::update(SrsSource* s, SrsRequest* r)
{
int ret = ERROR_SUCCESS;
srs_freep(req);
source = s;
req = r->copy();
return ret;
}
int SrsLiveStream::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
{
int ret = ERROR_SUCCESS;
... ... @@ -836,6 +858,8 @@ int SrsHttpStreamServer::http_mount(SrsSource* s, SrsRequest* r)
srs_trace("http: mount flv stream for vhost=%s, mount=%s", sid.c_str(), mount.c_str());
} else {
entry = sflvs[sid];
entry->stream->update(s, r);
entry->cache->update(s, r);
}
if (entry->stream) {
... ...
... ... @@ -51,6 +51,7 @@ private:
public:
SrsStreamCache(SrsSource* s, SrsRequest* r);
virtual ~SrsStreamCache();
virtual int update(SrsSource* s, SrsRequest* r);
public:
virtual int start();
virtual int dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jitter);
... ... @@ -227,6 +228,7 @@ private:
public:
SrsLiveStream(SrsSource* s, SrsRequest* r, SrsStreamCache* c);
virtual ~SrsLiveStream();
virtual int update(SrsSource* s, SrsRequest* r);
public:
virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
private:
... ...