Skip to content

Commit

Permalink
Showing 5 changed files with 19 additions and 32 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -344,6 +344,7 @@ Remark:

## History

* v2.0, 2016-12-13, fix #713, refine source to avoid critical fetch and create. 2.0.222
* <strong>v2.0, 2016-11-09, [2.0 beta2(2.0.221)][r2.0b2] released. 86691 lines.</strong>
* v2.0, 2016-11-05, fix #654, crash when source cleanup for edge. 2.0.221
* v2.0, 2016-10-26, fix #666, crash when source cleanup for http-flv. 2.0.220
8 changes: 3 additions & 5 deletions trunk/src/app/srs_app_http_stream.cpp
Original file line number Diff line number Diff line change
@@ -1228,11 +1228,9 @@ int SrsHttpStreamServer::hijack(ISrsHttpMessage* request, ISrsHttpHandler** ph)
}
}

SrsSource* s = SrsSource::fetch(r);
if (!s) {
if ((ret = SrsSource::create(r, server, server, &s)) != ERROR_SUCCESS) {
return ret;
}
SrsSource* s = NULL;
if ((ret = SrsSource::fetch_or_create(r, server, server, &s)) != ERROR_SUCCESS) {
return ret;
}
srs_assert(s != NULL);

8 changes: 3 additions & 5 deletions trunk/src/app/srs_app_rtmp_conn.cpp
Original file line number Diff line number Diff line change
@@ -486,11 +486,9 @@ int SrsRtmpConn::stream_service_cycle()
rtmp->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US);

// find a source to serve.
SrsSource* source = SrsSource::fetch(req);
if (!source) {
if ((ret = SrsSource::create(req, server, server, &source)) != ERROR_SUCCESS) {
return ret;
}
SrsSource* source = NULL;
if ((ret = SrsSource::fetch_or_create(req, server, server, &source)) != ERROR_SUCCESS) {
return ret;
}
srs_assert(source != NULL);

24 changes: 8 additions & 16 deletions trunk/src/app/srs_app_source.cpp
Original file line number Diff line number Diff line change
@@ -731,17 +731,23 @@ ISrsSourceHandler::~ISrsSourceHandler()

std::map<std::string, SrsSource*> SrsSource::pool;

int SrsSource::create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps)
int SrsSource::fetch_or_create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps)
{
int ret = ERROR_SUCCESS;

SrsSource* source = NULL;
if ((source = fetch(r)) != NULL) {
*pps = source;
return ret;
}

string stream_url = r->get_stream_url();
string vhost = r->vhost;

// should always not exists for create a source.
srs_assert (pool.find(stream_url) == pool.end());

SrsSource* source = new SrsSource();
source = new SrsSource();
if ((ret = source->initialize(r, h, hh)) != ERROR_SUCCESS) {
srs_freep(source);
return ret;
@@ -774,20 +780,6 @@ SrsSource* SrsSource::fetch(SrsRequest* r)
return source;
}

SrsSource* SrsSource::fetch(std::string vhost, std::string app, std::string stream)
{
SrsSource* source = NULL;
string stream_url = srs_generate_stream_url(vhost, app, stream);

if (pool.find(stream_url) == pool.end()) {
return NULL;
}

source = pool[stream_url];

return source;
}

void SrsSource::dispose_all()
{
std::map<std::string, SrsSource*>::iterator it;
10 changes: 4 additions & 6 deletions trunk/src/app/srs_app_source.hpp
Original file line number Diff line number Diff line change
@@ -418,22 +418,20 @@ class SrsSource : public ISrsReloadHandler
static std::map<std::string, SrsSource*> pool;
public:
/**
* find stream by vhost/app/stream.
* create source when fetch from cache failed.
* @param r the client request.
* @param h the event handler for source.
* @param hh the event handler for hls.
* @param pps the matched source, if success never be NULL.
*/
static int create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps);
static int fetch_or_create(SrsRequest* r, ISrsSourceHandler* h, ISrsHlsHandler* hh, SrsSource** pps);
private:
/**
* get the exists source, NULL when not exists.
* update the request and return the exists source.
*/
static SrsSource* fetch(SrsRequest* r);
/**
* get the exists source by stream info(vhost, app, stream), NULL when not exists.
*/
static SrsSource* fetch(std::string vhost, std::string app, std::string stream);
public:
/**
* dispose and cycle all sources.
*/

0 comments on commit cb1d47b

Please sign in to comment.