mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
fix dvr mem leak, free msg when not use it.
This commit is contained in:
parent
36c2c37b42
commit
0c91fa6bed
5 changed files with 27 additions and 0 deletions
|
@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#ifdef SRS_AUTO_DVR
|
#ifdef SRS_AUTO_DVR
|
||||||
|
|
||||||
#include <srs_kernel_error.hpp>
|
#include <srs_kernel_error.hpp>
|
||||||
|
#include <srs_protocol_rtmp_stack.hpp>
|
||||||
|
|
||||||
SrsDvr::SrsDvr(SrsSource* source)
|
SrsDvr::SrsDvr(SrsSource* source)
|
||||||
{
|
{
|
||||||
|
@ -55,12 +56,14 @@ int SrsDvr::on_meta_data(SrsAmf0Object* metadata)
|
||||||
int SrsDvr::on_audio(SrsSharedPtrMessage* audio)
|
int SrsDvr::on_audio(SrsSharedPtrMessage* audio)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
srs_freep(audio);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsDvr::on_video(SrsSharedPtrMessage* video)
|
int SrsDvr::on_video(SrsSharedPtrMessage* video)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
srs_freep(video);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@ int SrsEncoder::on_publish(SrsRequest* req)
|
||||||
srs_error("st_thread_create failed. ret=%d", ret);
|
srs_error("st_thread_create failed. ret=%d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
srs_trace("encoder thread cid=%d, current_cid=%d", pthread->cid(), _srs_context->get_id());
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,7 @@ SrsThread::SrsThread(ISrsThreadHandler* thread_handler, int64_t interval_us)
|
||||||
|
|
||||||
tid = NULL;
|
tid = NULL;
|
||||||
loop = false;
|
loop = false;
|
||||||
|
_cid = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsThread::~SrsThread()
|
SrsThread::~SrsThread()
|
||||||
|
@ -68,6 +69,11 @@ SrsThread::~SrsThread()
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SrsThread::cid()
|
||||||
|
{
|
||||||
|
return _cid;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsThread::start()
|
int SrsThread::start()
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
@ -83,6 +89,11 @@ int SrsThread::start()
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wait for cid to ready, for parent thread to get the cid.
|
||||||
|
while (_cid < 0) {
|
||||||
|
st_usleep(10 * SRS_TIME_MILLISECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,6 +122,7 @@ void SrsThread::thread_cycle()
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
_cid = _srs_context->get_id();
|
||||||
srs_assert(handler);
|
srs_assert(handler);
|
||||||
|
|
||||||
_srs_context->generate_id();
|
_srs_context->generate_id();
|
||||||
|
|
|
@ -84,6 +84,7 @@ class SrsThread
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
st_thread_t tid;
|
st_thread_t tid;
|
||||||
|
int _cid;
|
||||||
bool loop;
|
bool loop;
|
||||||
private:
|
private:
|
||||||
ISrsThreadHandler* handler;
|
ISrsThreadHandler* handler;
|
||||||
|
@ -97,6 +98,12 @@ public:
|
||||||
SrsThread(ISrsThreadHandler* thread_handler, int64_t interval_us);
|
SrsThread(ISrsThreadHandler* thread_handler, int64_t interval_us);
|
||||||
virtual ~SrsThread();
|
virtual ~SrsThread();
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* get the context id. @see: ISrsThreadContext.get_id().
|
||||||
|
* used for parent thread to get the id.
|
||||||
|
* @remark when start thread, parent thread will block and wait for this id ready.
|
||||||
|
*/
|
||||||
|
virtual int cid();
|
||||||
/**
|
/**
|
||||||
* start the thread, invoke the cycle of handler util
|
* start the thread, invoke the cycle of handler util
|
||||||
* user stop the thread.
|
* user stop the thread.
|
||||||
|
|
|
@ -124,4 +124,8 @@ extern bool srs_is_little_endian();
|
||||||
className(const className&); \
|
className(const className&); \
|
||||||
className& operator= (const className&)
|
className& operator= (const className&)
|
||||||
|
|
||||||
|
// const time for st to convert to us
|
||||||
|
#define SRS_TIME_MILLISECONDS 1000
|
||||||
|
#define SRS_TIME_SECONDS 1000000
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue