mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
fix mem leak for delete[] SharedPtrMessage array, explicit free elems. remove srs_freepa. 0.9.95
This commit is contained in:
parent
0a1c0afe8d
commit
befde6acf7
15 changed files with 209 additions and 174 deletions
|
@ -50,7 +50,7 @@ void SrsCodecBuffer::append(void* data, int len)
|
||||||
void SrsCodecBuffer::free()
|
void SrsCodecBuffer::free()
|
||||||
{
|
{
|
||||||
size = 0;
|
size = 0;
|
||||||
srs_freepa(bytes);
|
srs_freep(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsCodecSample::SrsCodecSample()
|
SrsCodecSample::SrsCodecSample()
|
||||||
|
@ -125,12 +125,12 @@ SrsCodec::SrsCodec()
|
||||||
|
|
||||||
SrsCodec::~SrsCodec()
|
SrsCodec::~SrsCodec()
|
||||||
{
|
{
|
||||||
srs_freepa(avc_extra_data);
|
srs_freep(avc_extra_data);
|
||||||
srs_freepa(aac_extra_data);
|
srs_freep(aac_extra_data);
|
||||||
|
|
||||||
srs_freep(stream);
|
srs_freep(stream);
|
||||||
srs_freepa(sequenceParameterSetNALUnit);
|
srs_freep(sequenceParameterSetNALUnit);
|
||||||
srs_freepa(pictureParameterSetNALUnit);
|
srs_freep(pictureParameterSetNALUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* sample)
|
int SrsCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* sample)
|
||||||
|
@ -207,7 +207,7 @@ int SrsCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* sample)
|
||||||
// 1.6.2.1 AudioSpecificConfig, in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 33.
|
// 1.6.2.1 AudioSpecificConfig, in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 33.
|
||||||
aac_extra_size = stream->left();
|
aac_extra_size = stream->left();
|
||||||
if (aac_extra_size > 0) {
|
if (aac_extra_size > 0) {
|
||||||
srs_freepa(aac_extra_data);
|
srs_freep(aac_extra_data);
|
||||||
aac_extra_data = new char[aac_extra_size];
|
aac_extra_data = new char[aac_extra_size];
|
||||||
memcpy(aac_extra_data, stream->current(), aac_extra_size);
|
memcpy(aac_extra_data, stream->current(), aac_extra_size);
|
||||||
}
|
}
|
||||||
|
@ -321,7 +321,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample)
|
||||||
// 5.2.4.1.1 Syntax, H.264-AVC-ISO_IEC_14496-15.pdf, page 16
|
// 5.2.4.1.1 Syntax, H.264-AVC-ISO_IEC_14496-15.pdf, page 16
|
||||||
avc_extra_size = stream->left();
|
avc_extra_size = stream->left();
|
||||||
if (avc_extra_size > 0) {
|
if (avc_extra_size > 0) {
|
||||||
srs_freepa(avc_extra_data);
|
srs_freep(avc_extra_data);
|
||||||
avc_extra_data = new char[avc_extra_size];
|
avc_extra_data = new char[avc_extra_size];
|
||||||
memcpy(avc_extra_data, stream->current(), avc_extra_size);
|
memcpy(avc_extra_data, stream->current(), avc_extra_size);
|
||||||
}
|
}
|
||||||
|
@ -366,7 +366,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (sequenceParameterSetLength > 0) {
|
if (sequenceParameterSetLength > 0) {
|
||||||
srs_freepa(sequenceParameterSetNALUnit);
|
srs_freep(sequenceParameterSetNALUnit);
|
||||||
sequenceParameterSetNALUnit = new char[sequenceParameterSetLength];
|
sequenceParameterSetNALUnit = new char[sequenceParameterSetLength];
|
||||||
memcpy(sequenceParameterSetNALUnit, stream->current(), sequenceParameterSetLength);
|
memcpy(sequenceParameterSetNALUnit, stream->current(), sequenceParameterSetLength);
|
||||||
stream->skip(sequenceParameterSetLength);
|
stream->skip(sequenceParameterSetLength);
|
||||||
|
@ -396,7 +396,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (pictureParameterSetLength > 0) {
|
if (pictureParameterSetLength > 0) {
|
||||||
srs_freepa(pictureParameterSetNALUnit);
|
srs_freep(pictureParameterSetNALUnit);
|
||||||
pictureParameterSetNALUnit = new char[pictureParameterSetLength];
|
pictureParameterSetNALUnit = new char[pictureParameterSetLength];
|
||||||
memcpy(pictureParameterSetNALUnit, stream->current(), pictureParameterSetLength);
|
memcpy(pictureParameterSetNALUnit, stream->current(), pictureParameterSetLength);
|
||||||
stream->skip(pictureParameterSetLength);
|
stream->skip(pictureParameterSetLength);
|
||||||
|
|
|
@ -93,7 +93,7 @@ SrsFileBuffer::SrsFileBuffer()
|
||||||
|
|
||||||
SrsFileBuffer::~SrsFileBuffer()
|
SrsFileBuffer::~SrsFileBuffer()
|
||||||
{
|
{
|
||||||
srs_freepa(start);
|
srs_freep(start);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsFileBuffer::fullfill(const char* filename)
|
int SrsFileBuffer::fullfill(const char* filename)
|
||||||
|
@ -117,7 +117,7 @@ int SrsFileBuffer::fullfill(const char* filename)
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_freepa(start);
|
srs_freep(start);
|
||||||
pos = last = start = new char[filesize];
|
pos = last = start = new char[filesize];
|
||||||
end = start + filesize;
|
end = start + filesize;
|
||||||
|
|
||||||
|
@ -407,15 +407,15 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, vector<string>& args)
|
||||||
|
|
||||||
if (found) {
|
if (found) {
|
||||||
int len = buffer->pos - pstart;
|
int len = buffer->pos - pstart;
|
||||||
char* word = new char[len];
|
char* aword = new char[len];
|
||||||
memcpy(word, pstart, len);
|
memcpy(aword, pstart, len);
|
||||||
word[len - 1] = 0;
|
aword[len - 1] = 0;
|
||||||
|
|
||||||
string word_str = word;
|
string word_str = aword;
|
||||||
if (!word_str.empty()) {
|
if (!word_str.empty()) {
|
||||||
args.push_back(word_str);
|
args.push_back(word_str);
|
||||||
}
|
}
|
||||||
srs_freepa(word);
|
srs_freep(aword);
|
||||||
|
|
||||||
if (ch == ';') {
|
if (ch == ';') {
|
||||||
return ERROR_SYSTEM_CONFIG_DIRECTIVE;
|
return ERROR_SYSTEM_CONFIG_DIRECTIVE;
|
||||||
|
|
|
@ -87,7 +87,7 @@ void SrsConnection::stop()
|
||||||
{
|
{
|
||||||
srs_close_stfd(stfd);
|
srs_close_stfd(stfd);
|
||||||
srs_freep(pthread);
|
srs_freep(pthread);
|
||||||
srs_freepa(ip);
|
srs_freep(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsConnection::get_peer_ip()
|
int SrsConnection::get_peer_ip()
|
||||||
|
|
|
@ -474,20 +474,33 @@ int SrsEdgeForwarder::cycle()
|
||||||
srs_verbose("no packets to forward.");
|
srs_verbose("no packets to forward.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
SrsAutoFree(SrsSharedPtrMessage*, msgs, true);
|
|
||||||
|
|
||||||
// all msgs to forward.
|
// all msgs to forward to origin.
|
||||||
|
// @remark, becareful, all msgs must be free explicitly,
|
||||||
|
// free by send_and_free_message or srs_freep.
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
SrsSharedPtrMessage* msg = msgs[i];
|
SrsSharedPtrMessage* msg = msgs[i];
|
||||||
|
|
||||||
srs_assert(msg);
|
srs_assert(msg);
|
||||||
msgs[i] = NULL;
|
msgs[i] = NULL;
|
||||||
|
|
||||||
|
// never use free msgs array, for it will memory leak.
|
||||||
|
// if error, directly free msgs.
|
||||||
|
if (ret != ERROR_SUCCESS) {
|
||||||
|
srs_freep(msg);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) {
|
||||||
srs_error("edge publish forwarder send message to server failed. ret=%d", ret);
|
srs_error("edge publish forwarder send message to server failed. ret=%d", ret);
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// free the array itself.
|
||||||
|
srs_freep(msgs);
|
||||||
|
if (ret != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -360,7 +360,7 @@ int SrsFFMPEG::start()
|
||||||
}
|
}
|
||||||
srs_trace("start transcoder, log: %s, params: %s",
|
srs_trace("start transcoder, log: %s, params: %s",
|
||||||
log_file.c_str(), pparam);
|
log_file.c_str(), pparam);
|
||||||
srs_freepa(pparam);
|
srs_freep(pparam);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fork or vfork?
|
// TODO: fork or vfork?
|
||||||
|
|
|
@ -352,20 +352,33 @@ int SrsForwarder::forward()
|
||||||
srs_verbose("no packets to forward.");
|
srs_verbose("no packets to forward.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
SrsAutoFree(SrsSharedPtrMessage*, msgs, true);
|
|
||||||
|
|
||||||
// all msgs to forward.
|
// all msgs to forward.
|
||||||
|
// @remark, becareful, all msgs must be free explicitly,
|
||||||
|
// free by send_and_free_message or srs_freep.
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
SrsSharedPtrMessage* msg = msgs[i];
|
SrsSharedPtrMessage* msg = msgs[i];
|
||||||
|
|
||||||
srs_assert(msg);
|
srs_assert(msg);
|
||||||
msgs[i] = NULL;
|
msgs[i] = NULL;
|
||||||
|
|
||||||
|
// never use free msgs array, for it will memory leak.
|
||||||
|
// if error, directly free msgs.
|
||||||
|
if (ret != ERROR_SUCCESS) {
|
||||||
|
srs_freep(msg);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) {
|
||||||
srs_error("forwarder send message to server failed. ret=%d", ret);
|
srs_error("forwarder send message to server failed. ret=%d", ret);
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// free the array itself.
|
||||||
|
srs_freep(msgs);
|
||||||
|
if (ret != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -523,7 +523,7 @@ SrsHttpMessage::~SrsHttpMessage()
|
||||||
srs_freep(_body);
|
srs_freep(_body);
|
||||||
srs_freep(_uri);
|
srs_freep(_uri);
|
||||||
srs_freep(_match);
|
srs_freep(_match);
|
||||||
srs_freepa(_http_ts_send_buffer);
|
srs_freep(_http_ts_send_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* SrsHttpMessage::http_ts_send_buffer()
|
char* SrsHttpMessage::http_ts_send_buffer()
|
||||||
|
|
|
@ -72,7 +72,7 @@ SrsFastLog::SrsFastLog()
|
||||||
|
|
||||||
SrsFastLog::~SrsFastLog()
|
SrsFastLog::~SrsFastLog()
|
||||||
{
|
{
|
||||||
srs_freepa(log_data);
|
srs_freep(log_data);
|
||||||
|
|
||||||
if (fd > 0) {
|
if (fd > 0) {
|
||||||
::close(fd);
|
::close(fd);
|
||||||
|
|
|
@ -513,9 +513,10 @@ int SrsRtmpConn::playing(SrsSource* source)
|
||||||
srs_verbose("no packets in queue.");
|
srs_verbose("no packets in queue.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
SrsAutoFree(SrsSharedPtrMessage*, msgs, true);
|
|
||||||
|
|
||||||
// sendout messages
|
// sendout messages
|
||||||
|
// @remark, becareful, all msgs must be free explicitly,
|
||||||
|
// free by send_and_free_message or srs_freep.
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
SrsSharedPtrMessage* msg = msgs[i];
|
SrsSharedPtrMessage* msg = msgs[i];
|
||||||
|
|
||||||
|
@ -525,6 +526,13 @@ int SrsRtmpConn::playing(SrsSource* source)
|
||||||
|
|
||||||
srs_assert(msg);
|
srs_assert(msg);
|
||||||
|
|
||||||
|
// never use free msgs array, for it will memory leak.
|
||||||
|
// if error, directly free msgs.
|
||||||
|
if (ret != ERROR_SUCCESS) {
|
||||||
|
srs_freep(msg);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// foreach msg, collect the duration.
|
// foreach msg, collect the duration.
|
||||||
// @remark: never use msg when sent it, for the protocol sdk will free it.
|
// @remark: never use msg when sent it, for the protocol sdk will free it.
|
||||||
if (starttime < 0 || starttime > msg->header.timestamp) {
|
if (starttime < 0 || starttime > msg->header.timestamp) {
|
||||||
|
@ -535,9 +543,14 @@ int SrsRtmpConn::playing(SrsSource* source)
|
||||||
|
|
||||||
if ((ret = rtmp->send_and_free_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = rtmp->send_and_free_message(msg)) != ERROR_SUCCESS) {
|
||||||
srs_error("send message to client failed. ret=%d", ret);
|
srs_error("send message to client failed. ret=%d", ret);
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// free the array itself.
|
||||||
|
srs_freep(msgs);
|
||||||
|
if (ret != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// if duration specified, and exceed it, stop play live.
|
// if duration specified, and exceed it, stop play live.
|
||||||
// @see: https://github.com/winlinvip/simple-rtmp-server/issues/45
|
// @see: https://github.com/winlinvip/simple-rtmp-server/issues/45
|
||||||
|
|
|
@ -844,7 +844,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata)
|
||||||
char* payload = NULL;
|
char* payload = NULL;
|
||||||
if ((ret = metadata->encode(size, payload)) != ERROR_SUCCESS) {
|
if ((ret = metadata->encode(size, payload)) != ERROR_SUCCESS) {
|
||||||
srs_error("encode metadata error. ret=%d", ret);
|
srs_error("encode metadata error. ret=%d", ret);
|
||||||
srs_freepa(payload);
|
srs_freep(payload);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
srs_verbose("encode metadata success.");
|
srs_verbose("encode metadata success.");
|
||||||
|
|
12
trunk/src/core/srs_core.hpp
Executable file → Normal file
12
trunk/src/core/srs_core.hpp
Executable file → Normal file
|
@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// current release version
|
// current release version
|
||||||
#define VERSION_MAJOR "0"
|
#define VERSION_MAJOR "0"
|
||||||
#define VERSION_MINOR "9"
|
#define VERSION_MINOR "9"
|
||||||
#define VERSION_REVISION "94"
|
#define VERSION_REVISION "95"
|
||||||
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
|
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
|
||||||
// server info.
|
// server info.
|
||||||
#define RTMP_SIG_SRS_KEY "srs"
|
#define RTMP_SIG_SRS_KEY "srs"
|
||||||
|
@ -81,13 +81,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
p = NULL; \
|
p = NULL; \
|
||||||
} \
|
} \
|
||||||
(void)0
|
(void)0
|
||||||
// free the p which represents a array
|
// sometimes, the freepa is useless,
|
||||||
#define srs_freepa(p) \
|
// it's recomments to free each elem explicit.
|
||||||
if (p) { \
|
// so we remove the srs_freepa utility.
|
||||||
delete[] p; \
|
|
||||||
p = NULL; \
|
|
||||||
} \
|
|
||||||
(void)0
|
|
||||||
|
|
||||||
// compare
|
// compare
|
||||||
#define srs_min(a, b) (((a) < (b))? (a) : (b))
|
#define srs_min(a, b) (((a) < (b))? (a) : (b))
|
||||||
|
|
|
@ -340,7 +340,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
|
||||||
|
|
||||||
msg = new SrsSharedPtrMessage();
|
msg = new SrsSharedPtrMessage();
|
||||||
if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
|
if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
|
||||||
srs_freepa(data);
|
srs_freep(data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} else if (type == SRS_RTMP_TYPE_VIDEO) {
|
} else if (type == SRS_RTMP_TYPE_VIDEO) {
|
||||||
|
@ -349,7 +349,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
|
||||||
|
|
||||||
msg = new SrsSharedPtrMessage();
|
msg = new SrsSharedPtrMessage();
|
||||||
if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
|
if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
|
||||||
srs_freepa(data);
|
srs_freep(data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} else if (type == SRS_RTMP_TYPE_SCRIPT) {
|
} else if (type == SRS_RTMP_TYPE_SCRIPT) {
|
||||||
|
@ -358,7 +358,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
|
||||||
|
|
||||||
msg = new SrsSharedPtrMessage();
|
msg = new SrsSharedPtrMessage();
|
||||||
if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
|
if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
|
||||||
srs_freepa(data);
|
srs_freep(data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// directly free data if not sent out.
|
// directly free data if not sent out.
|
||||||
srs_freepa(data);
|
srs_freep(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -336,10 +336,10 @@ namespace srs
|
||||||
void srs_key_block_free(key_block* key)
|
void srs_key_block_free(key_block* key)
|
||||||
{
|
{
|
||||||
if (key->random0) {
|
if (key->random0) {
|
||||||
srs_freepa(key->random0);
|
srs_freep(key->random0);
|
||||||
}
|
}
|
||||||
if (key->random1) {
|
if (key->random1) {
|
||||||
srs_freepa(key->random1);
|
srs_freep(key->random1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,10 +427,10 @@ namespace srs
|
||||||
void srs_digest_block_free(digest_block* digest)
|
void srs_digest_block_free(digest_block* digest)
|
||||||
{
|
{
|
||||||
if (digest->random0) {
|
if (digest->random0) {
|
||||||
srs_freepa(digest->random0);
|
srs_freep(digest->random0);
|
||||||
}
|
}
|
||||||
if (digest->random1) {
|
if (digest->random1) {
|
||||||
srs_freepa(digest->random1);
|
srs_freep(digest->random1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,9 +192,9 @@ SrsHandshakeBytes::SrsHandshakeBytes()
|
||||||
|
|
||||||
SrsHandshakeBytes::~SrsHandshakeBytes()
|
SrsHandshakeBytes::~SrsHandshakeBytes()
|
||||||
{
|
{
|
||||||
srs_freepa(c0c1);
|
srs_freep(c0c1);
|
||||||
srs_freepa(s0s1s2);
|
srs_freep(s0s1s2);
|
||||||
srs_freepa(c2);
|
srs_freep(c2);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsHandshakeBytes::read_c0c1(ISrsProtocolReaderWriter* io)
|
int SrsHandshakeBytes::read_c0c1(ISrsProtocolReaderWriter* io)
|
||||||
|
|
|
@ -1538,7 +1538,7 @@ SrsCommonMessage::SrsCommonMessage()
|
||||||
|
|
||||||
SrsCommonMessage::~SrsCommonMessage()
|
SrsCommonMessage::~SrsCommonMessage()
|
||||||
{
|
{
|
||||||
srs_freepa(payload);
|
srs_freep(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
|
SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
|
||||||
|
@ -1550,7 +1550,7 @@ SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
|
||||||
|
|
||||||
SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
|
SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
|
||||||
{
|
{
|
||||||
srs_freepa(payload);
|
srs_freep(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsSharedPtrMessage::SrsSharedPtrMessage()
|
SrsSharedPtrMessage::SrsSharedPtrMessage()
|
||||||
|
@ -1678,14 +1678,14 @@ int SrsPacket::encode(int& psize, char*& ppayload)
|
||||||
|
|
||||||
if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) {
|
if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) {
|
||||||
srs_error("initialize the stream failed. ret=%d", ret);
|
srs_error("initialize the stream failed. ret=%d", ret);
|
||||||
srs_freepa(payload);
|
srs_freep(payload);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ret = encode_packet(&stream)) != ERROR_SUCCESS) {
|
if ((ret = encode_packet(&stream)) != ERROR_SUCCESS) {
|
||||||
srs_error("encode the packet failed. ret=%d", ret);
|
srs_error("encode the packet failed. ret=%d", ret);
|
||||||
srs_freepa(payload);
|
srs_freep(payload);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue