fix dvr mem leak, free msg when not use it.

pull/133/head
winlin 11 years ago
parent 36c2c37b42
commit 0c91fa6bed

@ -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…
Cancel
Save