1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

fix the bug: when trying to push same stream more than twice, to play it through http-flv will cause a core dump(#666)

This commit is contained in:
hankun 2016-10-14 16:05:19 +08:00
parent d6fc289c6a
commit 4f09bcce9f
2 changed files with 26 additions and 0 deletions

24
trunk/src/app/srs_app_http_stream.cpp Normal file → Executable file
View file

@ -78,6 +78,17 @@ SrsStreamCache::~SrsStreamCache()
srs_freep(req); 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() int SrsStreamCache::start()
{ {
return pthread->start(); return pthread->start();
@ -451,6 +462,17 @@ SrsLiveStream::~SrsLiveStream()
srs_freep(req); 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 SrsLiveStream::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
{ {
int ret = ERROR_SUCCESS; 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()); srs_trace("http: mount flv stream for vhost=%s, mount=%s", sid.c_str(), mount.c_str());
} else { } else {
entry = sflvs[sid]; entry = sflvs[sid];
entry->stream->update(s, r);
entry->cache->update(s, r);
} }
if (entry->stream) { if (entry->stream) {

2
trunk/src/app/srs_app_http_stream.hpp Normal file → Executable file
View file

@ -51,6 +51,7 @@ private:
public: public:
SrsStreamCache(SrsSource* s, SrsRequest* r); SrsStreamCache(SrsSource* s, SrsRequest* r);
virtual ~SrsStreamCache(); virtual ~SrsStreamCache();
virtual int update(SrsSource* s, SrsRequest* r);
public: public:
virtual int start(); virtual int start();
virtual int dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jitter); virtual int dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jitter);
@ -227,6 +228,7 @@ private:
public: public:
SrsLiveStream(SrsSource* s, SrsRequest* r, SrsStreamCache* c); SrsLiveStream(SrsSource* s, SrsRequest* r, SrsStreamCache* c);
virtual ~SrsLiveStream(); virtual ~SrsLiveStream();
virtual int update(SrsSource* s, SrsRequest* r);
public: public:
virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r); virtual int serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
private: private: