winlin

fix mem leak for delete[] SharedPtrMessage array, explicit free elems. remove srs_freepa. 0.9.95

@@ -50,7 +50,7 @@ void SrsCodecBuffer::append(void* data, int len) @@ -50,7 +50,7 @@ void SrsCodecBuffer::append(void* data, int len)
50 void SrsCodecBuffer::free() 50 void SrsCodecBuffer::free()
51 { 51 {
52 size = 0; 52 size = 0;
53 - srs_freepa(bytes); 53 + srs_freep(bytes);
54 } 54 }
55 55
56 SrsCodecSample::SrsCodecSample() 56 SrsCodecSample::SrsCodecSample()
@@ -125,12 +125,12 @@ SrsCodec::SrsCodec() @@ -125,12 +125,12 @@ SrsCodec::SrsCodec()
125 125
126 SrsCodec::~SrsCodec() 126 SrsCodec::~SrsCodec()
127 { 127 {
128 - srs_freepa(avc_extra_data);  
129 - srs_freepa(aac_extra_data); 128 + srs_freep(avc_extra_data);
  129 + srs_freep(aac_extra_data);
130 130
131 srs_freep(stream); 131 srs_freep(stream);
132 - srs_freepa(sequenceParameterSetNALUnit);  
133 - srs_freepa(pictureParameterSetNALUnit); 132 + srs_freep(sequenceParameterSetNALUnit);
  133 + srs_freep(pictureParameterSetNALUnit);
134 } 134 }
135 135
136 int SrsCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* sample) 136 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) @@ -207,7 +207,7 @@ int SrsCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* sample)
207 // 1.6.2.1 AudioSpecificConfig, in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 33. 207 // 1.6.2.1 AudioSpecificConfig, in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 33.
208 aac_extra_size = stream->left(); 208 aac_extra_size = stream->left();
209 if (aac_extra_size > 0) { 209 if (aac_extra_size > 0) {
210 - srs_freepa(aac_extra_data); 210 + srs_freep(aac_extra_data);
211 aac_extra_data = new char[aac_extra_size]; 211 aac_extra_data = new char[aac_extra_size];
212 memcpy(aac_extra_data, stream->current(), aac_extra_size); 212 memcpy(aac_extra_data, stream->current(), aac_extra_size);
213 } 213 }
@@ -321,7 +321,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample) @@ -321,7 +321,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample)
321 // 5.2.4.1.1 Syntax, H.264-AVC-ISO_IEC_14496-15.pdf, page 16 321 // 5.2.4.1.1 Syntax, H.264-AVC-ISO_IEC_14496-15.pdf, page 16
322 avc_extra_size = stream->left(); 322 avc_extra_size = stream->left();
323 if (avc_extra_size > 0) { 323 if (avc_extra_size > 0) {
324 - srs_freepa(avc_extra_data); 324 + srs_freep(avc_extra_data);
325 avc_extra_data = new char[avc_extra_size]; 325 avc_extra_data = new char[avc_extra_size];
326 memcpy(avc_extra_data, stream->current(), avc_extra_size); 326 memcpy(avc_extra_data, stream->current(), avc_extra_size);
327 } 327 }
@@ -366,7 +366,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample) @@ -366,7 +366,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample)
366 return ret; 366 return ret;
367 } 367 }
368 if (sequenceParameterSetLength > 0) { 368 if (sequenceParameterSetLength > 0) {
369 - srs_freepa(sequenceParameterSetNALUnit); 369 + srs_freep(sequenceParameterSetNALUnit);
370 sequenceParameterSetNALUnit = new char[sequenceParameterSetLength]; 370 sequenceParameterSetNALUnit = new char[sequenceParameterSetLength];
371 memcpy(sequenceParameterSetNALUnit, stream->current(), sequenceParameterSetLength); 371 memcpy(sequenceParameterSetNALUnit, stream->current(), sequenceParameterSetLength);
372 stream->skip(sequenceParameterSetLength); 372 stream->skip(sequenceParameterSetLength);
@@ -396,7 +396,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample) @@ -396,7 +396,7 @@ int SrsCodec::video_avc_demux(int8_t* data, int size, SrsCodecSample* sample)
396 return ret; 396 return ret;
397 } 397 }
398 if (pictureParameterSetLength > 0) { 398 if (pictureParameterSetLength > 0) {
399 - srs_freepa(pictureParameterSetNALUnit); 399 + srs_freep(pictureParameterSetNALUnit);
400 pictureParameterSetNALUnit = new char[pictureParameterSetLength]; 400 pictureParameterSetNALUnit = new char[pictureParameterSetLength];
401 memcpy(pictureParameterSetNALUnit, stream->current(), pictureParameterSetLength); 401 memcpy(pictureParameterSetNALUnit, stream->current(), pictureParameterSetLength);
402 stream->skip(pictureParameterSetLength); 402 stream->skip(pictureParameterSetLength);
@@ -93,7 +93,7 @@ SrsFileBuffer::SrsFileBuffer() @@ -93,7 +93,7 @@ SrsFileBuffer::SrsFileBuffer()
93 93
94 SrsFileBuffer::~SrsFileBuffer() 94 SrsFileBuffer::~SrsFileBuffer()
95 { 95 {
96 - srs_freepa(start); 96 + srs_freep(start);
97 } 97 }
98 98
99 int SrsFileBuffer::fullfill(const char* filename) 99 int SrsFileBuffer::fullfill(const char* filename)
@@ -117,7 +117,7 @@ int SrsFileBuffer::fullfill(const char* filename) @@ -117,7 +117,7 @@ int SrsFileBuffer::fullfill(const char* filename)
117 goto finish; 117 goto finish;
118 } 118 }
119 119
120 - srs_freepa(start); 120 + srs_freep(start);
121 pos = last = start = new char[filesize]; 121 pos = last = start = new char[filesize];
122 end = start + filesize; 122 end = start + filesize;
123 123
@@ -407,15 +407,15 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, vector<string>& args) @@ -407,15 +407,15 @@ int SrsConfDirective::read_token(SrsFileBuffer* buffer, vector<string>& args)
407 407
408 if (found) { 408 if (found) {
409 int len = buffer->pos - pstart; 409 int len = buffer->pos - pstart;
410 - char* word = new char[len];  
411 - memcpy(word, pstart, len);  
412 - word[len - 1] = 0; 410 + char* aword = new char[len];
  411 + memcpy(aword, pstart, len);
  412 + aword[len - 1] = 0;
413 413
414 - string word_str = word; 414 + string word_str = aword;
415 if (!word_str.empty()) { 415 if (!word_str.empty()) {
416 args.push_back(word_str); 416 args.push_back(word_str);
417 } 417 }
418 - srs_freepa(word); 418 + srs_freep(aword);
419 419
420 if (ch == ';') { 420 if (ch == ';') {
421 return ERROR_SYSTEM_CONFIG_DIRECTIVE; 421 return ERROR_SYSTEM_CONFIG_DIRECTIVE;
@@ -87,7 +87,7 @@ void SrsConnection::stop() @@ -87,7 +87,7 @@ void SrsConnection::stop()
87 { 87 {
88 srs_close_stfd(stfd); 88 srs_close_stfd(stfd);
89 srs_freep(pthread); 89 srs_freep(pthread);
90 - srs_freepa(ip); 90 + srs_freep(ip);
91 } 91 }
92 92
93 int SrsConnection::get_peer_ip() 93 int SrsConnection::get_peer_ip()
@@ -474,19 +474,32 @@ int SrsEdgeForwarder::cycle() @@ -474,19 +474,32 @@ int SrsEdgeForwarder::cycle()
474 srs_verbose("no packets to forward."); 474 srs_verbose("no packets to forward.");
475 continue; 475 continue;
476 } 476 }
477 - SrsAutoFree(SrsSharedPtrMessage*, msgs, true);  
478 477
479 - // all msgs to forward. 478 + // all msgs to forward to origin.
  479 + // @remark, becareful, all msgs must be free explicitly,
  480 + // free by send_and_free_message or srs_freep.
480 for (int i = 0; i < count; i++) { 481 for (int i = 0; i < count; i++) {
481 SrsSharedPtrMessage* msg = msgs[i]; 482 SrsSharedPtrMessage* msg = msgs[i];
482 483
483 srs_assert(msg); 484 srs_assert(msg);
484 msgs[i] = NULL; 485 msgs[i] = NULL;
485 486
  487 + // never use free msgs array, for it will memory leak.
  488 + // if error, directly free msgs.
  489 + if (ret != ERROR_SUCCESS) {
  490 + srs_freep(msg);
  491 + continue;
  492 + }
  493 +
486 if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) { 494 if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) {
487 srs_error("edge publish forwarder send message to server failed. ret=%d", ret); 495 srs_error("edge publish forwarder send message to server failed. ret=%d", ret);
488 - return ret; 496 + break;
  497 + }
489 } 498 }
  499 + // free the array itself.
  500 + srs_freep(msgs);
  501 + if (ret != ERROR_SUCCESS) {
  502 + return ret;
490 } 503 }
491 } 504 }
492 505
@@ -360,7 +360,7 @@ int SrsFFMPEG::start() @@ -360,7 +360,7 @@ int SrsFFMPEG::start()
360 } 360 }
361 srs_trace("start transcoder, log: %s, params: %s", 361 srs_trace("start transcoder, log: %s, params: %s",
362 log_file.c_str(), pparam); 362 log_file.c_str(), pparam);
363 - srs_freepa(pparam); 363 + srs_freep(pparam);
364 } 364 }
365 365
366 // TODO: fork or vfork? 366 // TODO: fork or vfork?
@@ -352,19 +352,32 @@ int SrsForwarder::forward() @@ -352,19 +352,32 @@ int SrsForwarder::forward()
352 srs_verbose("no packets to forward."); 352 srs_verbose("no packets to forward.");
353 continue; 353 continue;
354 } 354 }
355 - SrsAutoFree(SrsSharedPtrMessage*, msgs, true);  
356 355
357 // all msgs to forward. 356 // all msgs to forward.
  357 + // @remark, becareful, all msgs must be free explicitly,
  358 + // free by send_and_free_message or srs_freep.
358 for (int i = 0; i < count; i++) { 359 for (int i = 0; i < count; i++) {
359 SrsSharedPtrMessage* msg = msgs[i]; 360 SrsSharedPtrMessage* msg = msgs[i];
360 361
361 srs_assert(msg); 362 srs_assert(msg);
362 msgs[i] = NULL; 363 msgs[i] = NULL;
363 364
  365 + // never use free msgs array, for it will memory leak.
  366 + // if error, directly free msgs.
  367 + if (ret != ERROR_SUCCESS) {
  368 + srs_freep(msg);
  369 + continue;
  370 + }
  371 +
364 if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) { 372 if ((ret = client->send_and_free_message(msg)) != ERROR_SUCCESS) {
365 srs_error("forwarder send message to server failed. ret=%d", ret); 373 srs_error("forwarder send message to server failed. ret=%d", ret);
366 - return ret; 374 + break;
  375 + }
367 } 376 }
  377 + // free the array itself.
  378 + srs_freep(msgs);
  379 + if (ret != ERROR_SUCCESS) {
  380 + return ret;
368 } 381 }
369 } 382 }
370 383
@@ -523,7 +523,7 @@ SrsHttpMessage::~SrsHttpMessage() @@ -523,7 +523,7 @@ SrsHttpMessage::~SrsHttpMessage()
523 srs_freep(_body); 523 srs_freep(_body);
524 srs_freep(_uri); 524 srs_freep(_uri);
525 srs_freep(_match); 525 srs_freep(_match);
526 - srs_freepa(_http_ts_send_buffer); 526 + srs_freep(_http_ts_send_buffer);
527 } 527 }
528 528
529 char* SrsHttpMessage::http_ts_send_buffer() 529 char* SrsHttpMessage::http_ts_send_buffer()
@@ -72,7 +72,7 @@ SrsFastLog::SrsFastLog() @@ -72,7 +72,7 @@ SrsFastLog::SrsFastLog()
72 72
73 SrsFastLog::~SrsFastLog() 73 SrsFastLog::~SrsFastLog()
74 { 74 {
75 - srs_freepa(log_data); 75 + srs_freep(log_data);
76 76
77 if (fd > 0) { 77 if (fd > 0) {
78 ::close(fd); 78 ::close(fd);
@@ -513,9 +513,10 @@ int SrsRtmpConn::playing(SrsSource* source) @@ -513,9 +513,10 @@ int SrsRtmpConn::playing(SrsSource* source)
513 srs_verbose("no packets in queue."); 513 srs_verbose("no packets in queue.");
514 continue; 514 continue;
515 } 515 }
516 - SrsAutoFree(SrsSharedPtrMessage*, msgs, true);  
517 516
518 // sendout messages 517 // sendout messages
  518 + // @remark, becareful, all msgs must be free explicitly,
  519 + // free by send_and_free_message or srs_freep.
519 for (int i = 0; i < count; i++) { 520 for (int i = 0; i < count; i++) {
520 SrsSharedPtrMessage* msg = msgs[i]; 521 SrsSharedPtrMessage* msg = msgs[i];
521 522
@@ -525,6 +526,13 @@ int SrsRtmpConn::playing(SrsSource* source) @@ -525,6 +526,13 @@ int SrsRtmpConn::playing(SrsSource* source)
525 526
526 srs_assert(msg); 527 srs_assert(msg);
527 528
  529 + // never use free msgs array, for it will memory leak.
  530 + // if error, directly free msgs.
  531 + if (ret != ERROR_SUCCESS) {
  532 + srs_freep(msg);
  533 + continue;
  534 + }
  535 +
528 // foreach msg, collect the duration. 536 // foreach msg, collect the duration.
529 // @remark: never use msg when sent it, for the protocol sdk will free it. 537 // @remark: never use msg when sent it, for the protocol sdk will free it.
530 if (starttime < 0 || starttime > msg->header.timestamp) { 538 if (starttime < 0 || starttime > msg->header.timestamp) {
@@ -535,8 +543,13 @@ int SrsRtmpConn::playing(SrsSource* source) @@ -535,8 +543,13 @@ int SrsRtmpConn::playing(SrsSource* source)
535 543
536 if ((ret = rtmp->send_and_free_message(msg)) != ERROR_SUCCESS) { 544 if ((ret = rtmp->send_and_free_message(msg)) != ERROR_SUCCESS) {
537 srs_error("send message to client failed. ret=%d", ret); 545 srs_error("send message to client failed. ret=%d", ret);
538 - return ret; 546 + break;
  547 + }
539 } 548 }
  549 + // free the array itself.
  550 + srs_freep(msgs);
  551 + if (ret != ERROR_SUCCESS) {
  552 + return ret;
540 } 553 }
541 554
542 // if duration specified, and exceed it, stop play live. 555 // if duration specified, and exceed it, stop play live.
@@ -844,7 +844,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata) @@ -844,7 +844,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata)
844 char* payload = NULL; 844 char* payload = NULL;
845 if ((ret = metadata->encode(size, payload)) != ERROR_SUCCESS) { 845 if ((ret = metadata->encode(size, payload)) != ERROR_SUCCESS) {
846 srs_error("encode metadata error. ret=%d", ret); 846 srs_error("encode metadata error. ret=%d", ret);
847 - srs_freepa(payload); 847 + srs_freep(payload);
848 return ret; 848 return ret;
849 } 849 }
850 srs_verbose("encode metadata success."); 850 srs_verbose("encode metadata success.");
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 // current release version 31 // current release version
32 #define VERSION_MAJOR "0" 32 #define VERSION_MAJOR "0"
33 #define VERSION_MINOR "9" 33 #define VERSION_MINOR "9"
34 -#define VERSION_REVISION "94" 34 +#define VERSION_REVISION "95"
35 #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION 35 #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
36 // server info. 36 // server info.
37 #define RTMP_SIG_SRS_KEY "srs" 37 #define RTMP_SIG_SRS_KEY "srs"
@@ -81,13 +81,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -81,13 +81,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
81 p = NULL; \ 81 p = NULL; \
82 } \ 82 } \
83 (void)0 83 (void)0
84 -// free the p which represents a array  
85 -#define srs_freepa(p) \  
86 - if (p) { \  
87 - delete[] p; \  
88 - p = NULL; \  
89 - } \  
90 - (void)0 84 +// sometimes, the freepa is useless,
  85 +// it's recomments to free each elem explicit.
  86 +// so we remove the srs_freepa utility.
91 87
92 // compare 88 // compare
93 #define srs_min(a, b) (((a) < (b))? (a) : (b)) 89 #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, @@ -340,7 +340,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
340 340
341 msg = new SrsSharedPtrMessage(); 341 msg = new SrsSharedPtrMessage();
342 if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) { 342 if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
343 - srs_freepa(data); 343 + srs_freep(data);
344 return ret; 344 return ret;
345 } 345 }
346 } else if (type == SRS_RTMP_TYPE_VIDEO) { 346 } 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, @@ -349,7 +349,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
349 349
350 msg = new SrsSharedPtrMessage(); 350 msg = new SrsSharedPtrMessage();
351 if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) { 351 if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
352 - srs_freepa(data); 352 + srs_freep(data);
353 return ret; 353 return ret;
354 } 354 }
355 } else if (type == SRS_RTMP_TYPE_SCRIPT) { 355 } 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, @@ -358,7 +358,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
358 358
359 msg = new SrsSharedPtrMessage(); 359 msg = new SrsSharedPtrMessage();
360 if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) { 360 if ((ret = msg->initialize(&header, data, size)) != ERROR_SUCCESS) {
361 - srs_freepa(data); 361 + srs_freep(data);
362 return ret; 362 return ret;
363 } 363 }
364 } 364 }
@@ -370,7 +370,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data, @@ -370,7 +370,7 @@ int srs_write_packet(srs_rtmp_t rtmp, int type, u_int32_t timestamp, char* data,
370 } 370 }
371 } else { 371 } else {
372 // directly free data if not sent out. 372 // directly free data if not sent out.
373 - srs_freepa(data); 373 + srs_freep(data);
374 } 374 }
375 375
376 return ret; 376 return ret;
@@ -336,10 +336,10 @@ namespace srs @@ -336,10 +336,10 @@ namespace srs
336 void srs_key_block_free(key_block* key) 336 void srs_key_block_free(key_block* key)
337 { 337 {
338 if (key->random0) { 338 if (key->random0) {
339 - srs_freepa(key->random0); 339 + srs_freep(key->random0);
340 } 340 }
341 if (key->random1) { 341 if (key->random1) {
342 - srs_freepa(key->random1); 342 + srs_freep(key->random1);
343 } 343 }
344 } 344 }
345 345
@@ -427,10 +427,10 @@ namespace srs @@ -427,10 +427,10 @@ namespace srs
427 void srs_digest_block_free(digest_block* digest) 427 void srs_digest_block_free(digest_block* digest)
428 { 428 {
429 if (digest->random0) { 429 if (digest->random0) {
430 - srs_freepa(digest->random0); 430 + srs_freep(digest->random0);
431 } 431 }
432 if (digest->random1) { 432 if (digest->random1) {
433 - srs_freepa(digest->random1); 433 + srs_freep(digest->random1);
434 } 434 }
435 } 435 }
436 436
@@ -192,9 +192,9 @@ SrsHandshakeBytes::SrsHandshakeBytes() @@ -192,9 +192,9 @@ SrsHandshakeBytes::SrsHandshakeBytes()
192 192
193 SrsHandshakeBytes::~SrsHandshakeBytes() 193 SrsHandshakeBytes::~SrsHandshakeBytes()
194 { 194 {
195 - srs_freepa(c0c1);  
196 - srs_freepa(s0s1s2);  
197 - srs_freepa(c2); 195 + srs_freep(c0c1);
  196 + srs_freep(s0s1s2);
  197 + srs_freep(c2);
198 } 198 }
199 199
200 int SrsHandshakeBytes::read_c0c1(ISrsProtocolReaderWriter* io) 200 int SrsHandshakeBytes::read_c0c1(ISrsProtocolReaderWriter* io)
@@ -1538,7 +1538,7 @@ SrsCommonMessage::SrsCommonMessage() @@ -1538,7 +1538,7 @@ SrsCommonMessage::SrsCommonMessage()
1538 1538
1539 SrsCommonMessage::~SrsCommonMessage() 1539 SrsCommonMessage::~SrsCommonMessage()
1540 { 1540 {
1541 - srs_freepa(payload); 1541 + srs_freep(payload);
1542 } 1542 }
1543 1543
1544 SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr() 1544 SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
@@ -1550,7 +1550,7 @@ SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr() @@ -1550,7 +1550,7 @@ SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
1550 1550
1551 SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr() 1551 SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
1552 { 1552 {
1553 - srs_freepa(payload); 1553 + srs_freep(payload);
1554 } 1554 }
1555 1555
1556 SrsSharedPtrMessage::SrsSharedPtrMessage() 1556 SrsSharedPtrMessage::SrsSharedPtrMessage()
@@ -1678,14 +1678,14 @@ int SrsPacket::encode(int& psize, char*& ppayload) @@ -1678,14 +1678,14 @@ int SrsPacket::encode(int& psize, char*& ppayload)
1678 1678
1679 if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) { 1679 if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) {
1680 srs_error("initialize the stream failed. ret=%d", ret); 1680 srs_error("initialize the stream failed. ret=%d", ret);
1681 - srs_freepa(payload); 1681 + srs_freep(payload);
1682 return ret; 1682 return ret;
1683 } 1683 }
1684 } 1684 }
1685 1685
1686 if ((ret = encode_packet(&stream)) != ERROR_SUCCESS) { 1686 if ((ret = encode_packet(&stream)) != ERROR_SUCCESS) {
1687 srs_error("encode the packet failed. ret=%d", ret); 1687 srs_error("encode the packet failed. ret=%d", ret);
1688 - srs_freepa(payload); 1688 + srs_freep(payload);
1689 return ret; 1689 return ret;
1690 } 1690 }
1691 1691