winlin

for #515, use srs_freepa to free the array.

@@ -205,7 +205,7 @@ int SrsDynamicHttpConn::do_proxy(ISrsHttpResponseReader* rr, SrsFlvDecoder* dec) @@ -205,7 +205,7 @@ int SrsDynamicHttpConn::do_proxy(ISrsHttpResponseReader* rr, SrsFlvDecoder* dec)
205 205
206 char* data = new char[size]; 206 char* data = new char[size];
207 if ((ret = dec->read_tag_data(data, size)) != ERROR_SUCCESS) { 207 if ((ret = dec->read_tag_data(data, size)) != ERROR_SUCCESS) {
208 - srs_freep(data); 208 + srs_freepa(data);
209 if (!srs_is_client_gracefully_close(ret)) { 209 if (!srs_is_client_gracefully_close(ret)) {
210 srs_error("flv: proxy tag data failed. ret=%d", ret); 210 srs_error("flv: proxy tag data failed. ret=%d", ret);
211 } 211 }
@@ -433,7 +433,7 @@ int SrsConfDirective::read_token(SrsConfigBuffer* buffer, vector<string>& args, @@ -433,7 +433,7 @@ int SrsConfDirective::read_token(SrsConfigBuffer* buffer, vector<string>& args,
433 if (!word_str.empty()) { 433 if (!word_str.empty()) {
434 args.push_back(word_str); 434 args.push_back(word_str);
435 } 435 }
436 - srs_freep(aword); 436 + srs_freepa(aword);
437 437
438 if (ch == ';') { 438 if (ch == ';') {
439 return ERROR_SYSTEM_CONFIG_DIRECTIVE; 439 return ERROR_SYSTEM_CONFIG_DIRECTIVE;
@@ -4488,7 +4488,7 @@ namespace _srs_internal @@ -4488,7 +4488,7 @@ namespace _srs_internal
4488 4488
4489 SrsConfigBuffer::~SrsConfigBuffer() 4489 SrsConfigBuffer::~SrsConfigBuffer()
4490 { 4490 {
4491 - srs_freep(start); 4491 + srs_freepa(start);
4492 } 4492 }
4493 4493
4494 int SrsConfigBuffer::fullfill(const char* filename) 4494 int SrsConfigBuffer::fullfill(const char* filename)
@@ -4507,7 +4507,7 @@ namespace _srs_internal @@ -4507,7 +4507,7 @@ namespace _srs_internal
4507 int filesize = (int)reader.filesize(); 4507 int filesize = (int)reader.filesize();
4508 4508
4509 // create buffer 4509 // create buffer
4510 - srs_freep(start); 4510 + srs_freepa(start);
4511 pos = last = start = new char[filesize]; 4511 pos = last = start = new char[filesize];
4512 end = start + filesize; 4512 end = start + filesize;
4513 4513
@@ -76,7 +76,7 @@ SrsHttpResponseWriter::SrsHttpResponseWriter(SrsStSocket* io) @@ -76,7 +76,7 @@ SrsHttpResponseWriter::SrsHttpResponseWriter(SrsStSocket* io)
76 SrsHttpResponseWriter::~SrsHttpResponseWriter() 76 SrsHttpResponseWriter::~SrsHttpResponseWriter()
77 { 77 {
78 srs_freep(hdr); 78 srs_freep(hdr);
79 - srs_freep(iovss_cache); 79 + srs_freepa(iovss_cache);
80 } 80 }
81 81
82 int SrsHttpResponseWriter::final_request() 82 int SrsHttpResponseWriter::final_request()
@@ -188,7 +188,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) @@ -188,7 +188,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite)
188 int nb_iovss = 3 + iovcnt; 188 int nb_iovss = 3 + iovcnt;
189 iovec* iovss = iovss_cache; 189 iovec* iovss = iovss_cache;
190 if (nb_iovss_cache < nb_iovss) { 190 if (nb_iovss_cache < nb_iovss) {
191 - srs_freep(iovss_cache); 191 + srs_freepa(iovss_cache);
192 nb_iovss_cache = nb_iovss; 192 nb_iovss_cache = nb_iovss;
193 iovss = iovss_cache = new iovec[nb_iovss]; 193 iovss = iovss_cache = new iovec[nb_iovss];
194 } 194 }
@@ -506,7 +506,7 @@ SrsHttpMessage::~SrsHttpMessage() @@ -506,7 +506,7 @@ SrsHttpMessage::~SrsHttpMessage()
506 { 506 {
507 srs_freep(_body); 507 srs_freep(_body);
508 srs_freep(_uri); 508 srs_freep(_uri);
509 - srs_freep(_http_ts_send_buffer); 509 + srs_freepa(_http_ts_send_buffer);
510 } 510 }
511 511
512 int SrsHttpMessage::update(string url, http_parser* header, SrsFastBuffer* body, vector<SrsHttpHeaderField>& headers) 512 int SrsHttpMessage::update(string url, http_parser* header, SrsFastBuffer* body, vector<SrsHttpHeaderField>& headers)
@@ -94,7 +94,7 @@ SrsUdpListener::~SrsUdpListener() @@ -94,7 +94,7 @@ SrsUdpListener::~SrsUdpListener()
94 // close it manually. 94 // close it manually.
95 close(_fd); 95 close(_fd);
96 96
97 - srs_freep(buf); 97 + srs_freepa(buf);
98 } 98 }
99 99
100 int SrsUdpListener::fd() 100 int SrsUdpListener::fd()
@@ -91,7 +91,7 @@ SrsFastLog::SrsFastLog() @@ -91,7 +91,7 @@ SrsFastLog::SrsFastLog()
91 91
92 SrsFastLog::~SrsFastLog() 92 SrsFastLog::~SrsFastLog()
93 { 93 {
94 - srs_freep(log_data); 94 + srs_freepa(log_data);
95 95
96 if (fd > 0) { 96 if (fd > 0) {
97 ::close(fd); 97 ::close(fd);
@@ -161,7 +161,7 @@ SrsFastVector::SrsFastVector() @@ -161,7 +161,7 @@ SrsFastVector::SrsFastVector()
161 SrsFastVector::~SrsFastVector() 161 SrsFastVector::~SrsFastVector()
162 { 162 {
163 free(); 163 free();
164 - srs_freep(msgs); 164 + srs_freepa(msgs);
165 } 165 }
166 166
167 int SrsFastVector::size() 167 int SrsFastVector::size()
@@ -220,7 +220,7 @@ void SrsFastVector::push_back(SrsSharedPtrMessage* msg) @@ -220,7 +220,7 @@ void SrsFastVector::push_back(SrsSharedPtrMessage* msg)
220 srs_warn("fast vector incrase %d=>%d", nb_msgs, size); 220 srs_warn("fast vector incrase %d=>%d", nb_msgs, size);
221 221
222 // use new array. 222 // use new array.
223 - srs_freep(msgs); 223 + srs_freepa(msgs);
224 msgs = buf; 224 msgs = buf;
225 nb_msgs = size; 225 nb_msgs = size;
226 } 226 }
@@ -103,9 +103,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -103,9 +103,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
103 p = NULL; \ 103 p = NULL; \
104 } \ 104 } \
105 (void)0 105 (void)0
106 -// sometimes, the freepa is useless,  
107 -// it's recomments to free each elem explicit.  
108 -// so we remove the srs_freepa utility. 106 +// please use the freepa(T[]) to free an array,
  107 +// or the behavior is undefined.
  108 +#define srs_freepa(pa) \
  109 + if (pa) { \
  110 + delete[] pa; \
  111 + pa = NULL; \
  112 + } \
  113 + (void)0
109 114
110 /** 115 /**
111 * disable copy constructor of class, 116 * disable copy constructor of class,
@@ -419,12 +419,12 @@ SrsAvcAacCodec::SrsAvcAacCodec() @@ -419,12 +419,12 @@ SrsAvcAacCodec::SrsAvcAacCodec()
419 419
420 SrsAvcAacCodec::~SrsAvcAacCodec() 420 SrsAvcAacCodec::~SrsAvcAacCodec()
421 { 421 {
422 - srs_freep(avc_extra_data);  
423 - srs_freep(aac_extra_data); 422 + srs_freepa(avc_extra_data);
  423 + srs_freepa(aac_extra_data);
424 424
425 srs_freep(stream); 425 srs_freep(stream);
426 - srs_freep(sequenceParameterSetNALUnit);  
427 - srs_freep(pictureParameterSetNALUnit); 426 + srs_freepa(sequenceParameterSetNALUnit);
  427 + srs_freepa(pictureParameterSetNALUnit);
428 } 428 }
429 429
430 bool SrsAvcAacCodec::is_avc_codec_ok() 430 bool SrsAvcAacCodec::is_avc_codec_ok()
@@ -500,7 +500,7 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample @@ -500,7 +500,7 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample
500 // 1.6.2.1 AudioSpecificConfig, in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 33. 500 // 1.6.2.1 AudioSpecificConfig, in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 33.
501 aac_extra_size = stream->size() - stream->pos(); 501 aac_extra_size = stream->size() - stream->pos();
502 if (aac_extra_size > 0) { 502 if (aac_extra_size > 0) {
503 - srs_freep(aac_extra_data); 503 + srs_freepa(aac_extra_data);
504 aac_extra_data = new char[aac_extra_size]; 504 aac_extra_data = new char[aac_extra_size];
505 memcpy(aac_extra_data, stream->data() + stream->pos(), aac_extra_size); 505 memcpy(aac_extra_data, stream->data() + stream->pos(), aac_extra_size);
506 506
@@ -764,7 +764,7 @@ int SrsAvcAacCodec::avc_demux_sps_pps(SrsStream* stream) @@ -764,7 +764,7 @@ int SrsAvcAacCodec::avc_demux_sps_pps(SrsStream* stream)
764 // 5.2.4.1.1 Syntax, H.264-AVC-ISO_IEC_14496-15.pdf, page 16 764 // 5.2.4.1.1 Syntax, H.264-AVC-ISO_IEC_14496-15.pdf, page 16
765 avc_extra_size = stream->size() - stream->pos(); 765 avc_extra_size = stream->size() - stream->pos();
766 if (avc_extra_size > 0) { 766 if (avc_extra_size > 0) {
767 - srs_freep(avc_extra_data); 767 + srs_freepa(avc_extra_data);
768 avc_extra_data = new char[avc_extra_size]; 768 avc_extra_data = new char[avc_extra_size];
769 memcpy(avc_extra_data, stream->data() + stream->pos(), avc_extra_size); 769 memcpy(avc_extra_data, stream->data() + stream->pos(), avc_extra_size);
770 } 770 }
@@ -825,7 +825,7 @@ int SrsAvcAacCodec::avc_demux_sps_pps(SrsStream* stream) @@ -825,7 +825,7 @@ int SrsAvcAacCodec::avc_demux_sps_pps(SrsStream* stream)
825 return ret; 825 return ret;
826 } 826 }
827 if (sequenceParameterSetLength > 0) { 827 if (sequenceParameterSetLength > 0) {
828 - srs_freep(sequenceParameterSetNALUnit); 828 + srs_freepa(sequenceParameterSetNALUnit);
829 sequenceParameterSetNALUnit = new char[sequenceParameterSetLength]; 829 sequenceParameterSetNALUnit = new char[sequenceParameterSetLength];
830 stream->read_bytes(sequenceParameterSetNALUnit, sequenceParameterSetLength); 830 stream->read_bytes(sequenceParameterSetNALUnit, sequenceParameterSetLength);
831 } 831 }
@@ -854,7 +854,7 @@ int SrsAvcAacCodec::avc_demux_sps_pps(SrsStream* stream) @@ -854,7 +854,7 @@ int SrsAvcAacCodec::avc_demux_sps_pps(SrsStream* stream)
854 return ret; 854 return ret;
855 } 855 }
856 if (pictureParameterSetLength > 0) { 856 if (pictureParameterSetLength > 0) {
857 - srs_freep(pictureParameterSetNALUnit); 857 + srs_freepa(pictureParameterSetNALUnit);
858 pictureParameterSetNALUnit = new char[pictureParameterSetLength]; 858 pictureParameterSetNALUnit = new char[pictureParameterSetLength];
859 stream->read_bytes(pictureParameterSetNALUnit, pictureParameterSetLength); 859 stream->read_bytes(pictureParameterSetNALUnit, pictureParameterSetLength);
860 } 860 }
@@ -163,12 +163,12 @@ SrsCommonMessage::~SrsCommonMessage() @@ -163,12 +163,12 @@ SrsCommonMessage::~SrsCommonMessage()
163 #ifdef SRS_AUTO_MEM_WATCH 163 #ifdef SRS_AUTO_MEM_WATCH
164 srs_memory_unwatch(payload); 164 srs_memory_unwatch(payload);
165 #endif 165 #endif
166 - srs_freep(payload); 166 + srs_freepa(payload);
167 } 167 }
168 168
169 void SrsCommonMessage::create_payload(int size) 169 void SrsCommonMessage::create_payload(int size)
170 { 170 {
171 - srs_freep(payload); 171 + srs_freepa(payload);
172 172
173 payload = new char[size]; 173 payload = new char[size];
174 srs_verbose("create payload for RTMP message. size=%d", size); 174 srs_verbose("create payload for RTMP message. size=%d", size);
@@ -190,7 +190,7 @@ SrsSharedPtrMessage::SrsSharedPtrPayload::~SrsSharedPtrPayload() @@ -190,7 +190,7 @@ SrsSharedPtrMessage::SrsSharedPtrPayload::~SrsSharedPtrPayload()
190 #ifdef SRS_AUTO_MEM_WATCH 190 #ifdef SRS_AUTO_MEM_WATCH
191 srs_memory_unwatch(payload); 191 srs_memory_unwatch(payload);
192 #endif 192 #endif
193 - srs_freep(payload); 193 + srs_freepa(payload);
194 } 194 }
195 195
196 SrsSharedPtrMessage::SrsSharedPtrMessage() 196 SrsSharedPtrMessage::SrsSharedPtrMessage()
@@ -350,9 +350,9 @@ SrsFlvEncoder::~SrsFlvEncoder() @@ -350,9 +350,9 @@ SrsFlvEncoder::~SrsFlvEncoder()
350 srs_freep(tag_stream); 350 srs_freep(tag_stream);
351 351
352 #ifdef SRS_PERF_FAST_FLV_ENCODER 352 #ifdef SRS_PERF_FAST_FLV_ENCODER
353 - srs_freep(tag_headers);  
354 - srs_freep(iovss_cache);  
355 - srs_freep(ppts); 353 + srs_freepa(tag_headers);
  354 + srs_freepa(iovss_cache);
  355 + srs_freepa(ppts);
356 #endif 356 #endif
357 } 357 }
358 358
@@ -489,7 +489,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) @@ -489,7 +489,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count)
489 int nb_iovss = 3 * count; 489 int nb_iovss = 3 * count;
490 iovec* iovss = iovss_cache; 490 iovec* iovss = iovss_cache;
491 if (nb_iovss_cache < nb_iovss) { 491 if (nb_iovss_cache < nb_iovss) {
492 - srs_freep(iovss_cache); 492 + srs_freepa(iovss_cache);
493 493
494 nb_iovss_cache = nb_iovss; 494 nb_iovss_cache = nb_iovss;
495 iovss = iovss_cache = new iovec[nb_iovss]; 495 iovss = iovss_cache = new iovec[nb_iovss];
@@ -498,7 +498,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) @@ -498,7 +498,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count)
498 // realloc the tag headers. 498 // realloc the tag headers.
499 char* cache = tag_headers; 499 char* cache = tag_headers;
500 if (nb_tag_headers < count) { 500 if (nb_tag_headers < count) {
501 - srs_freep(tag_headers); 501 + srs_freepa(tag_headers);
502 502
503 nb_tag_headers = count; 503 nb_tag_headers = count;
504 cache = tag_headers = new char[SRS_FLV_TAG_HEADER_SIZE * count]; 504 cache = tag_headers = new char[SRS_FLV_TAG_HEADER_SIZE * count];
@@ -507,7 +507,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) @@ -507,7 +507,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count)
507 // realloc the pts. 507 // realloc the pts.
508 char* pts = ppts; 508 char* pts = ppts;
509 if (nb_ppts < count) { 509 if (nb_ppts < count) {
510 - srs_freep(ppts); 510 + srs_freepa(ppts);
511 511
512 nb_ppts = count; 512 nb_ppts = count;
513 pts = ppts = new char[SRS_FLV_PREVIOUS_TAG_SIZE * count]; 513 pts = ppts = new char[SRS_FLV_PREVIOUS_TAG_SIZE * count];
@@ -915,7 +915,7 @@ SrsTsAdaptationField::SrsTsAdaptationField(SrsTsPacket* pkt) @@ -915,7 +915,7 @@ SrsTsAdaptationField::SrsTsAdaptationField(SrsTsPacket* pkt)
915 915
916 SrsTsAdaptationField::~SrsTsAdaptationField() 916 SrsTsAdaptationField::~SrsTsAdaptationField()
917 { 917 {
918 - srs_freep(transport_private_data); 918 + srs_freepa(transport_private_data);
919 } 919 }
920 920
921 int SrsTsAdaptationField::decode(SrsStream* stream) 921 int SrsTsAdaptationField::decode(SrsStream* stream)
@@ -1040,7 +1040,7 @@ int SrsTsAdaptationField::decode(SrsStream* stream) @@ -1040,7 +1040,7 @@ int SrsTsAdaptationField::decode(SrsStream* stream)
1040 srs_error("ts: demux af transport_private_data_flag failed. ret=%d", ret); 1040 srs_error("ts: demux af transport_private_data_flag failed. ret=%d", ret);
1041 return ret; 1041 return ret;
1042 } 1042 }
1043 - srs_freep(transport_private_data); 1043 + srs_freepa(transport_private_data);
1044 transport_private_data = new char[transport_private_data_length]; 1044 transport_private_data = new char[transport_private_data_length];
1045 stream->read_bytes(transport_private_data, transport_private_data_length); 1045 stream->read_bytes(transport_private_data, transport_private_data_length);
1046 } 1046 }
@@ -1325,9 +1325,9 @@ SrsTsPayloadPES::SrsTsPayloadPES(SrsTsPacket* p) : SrsTsPayload(p) @@ -1325,9 +1325,9 @@ SrsTsPayloadPES::SrsTsPayloadPES(SrsTsPacket* p) : SrsTsPayload(p)
1325 1325
1326 SrsTsPayloadPES::~SrsTsPayloadPES() 1326 SrsTsPayloadPES::~SrsTsPayloadPES()
1327 { 1327 {
1328 - srs_freep(PES_private_data);  
1329 - srs_freep(pack_field);  
1330 - srs_freep(PES_extension_field); 1328 + srs_freepa(PES_private_data);
  1329 + srs_freepa(pack_field);
  1330 + srs_freepa(PES_extension_field);
1331 } 1331 }
1332 1332
1333 int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) 1333 int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
@@ -1604,7 +1604,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -1604,7 +1604,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
1604 1604
1605 // 16B 1605 // 16B
1606 if (PES_private_data_flag) { 1606 if (PES_private_data_flag) {
1607 - srs_freep(PES_private_data); 1607 + srs_freepa(PES_private_data);
1608 PES_private_data = new char[16]; 1608 PES_private_data = new char[16];
1609 stream->read_bytes(PES_private_data, 16); 1609 stream->read_bytes(PES_private_data, 16);
1610 } 1610 }
@@ -1620,7 +1620,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -1620,7 +1620,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
1620 srs_error("ts: demux PSE ext pack failed. ret=%d", ret); 1620 srs_error("ts: demux PSE ext pack failed. ret=%d", ret);
1621 return ret; 1621 return ret;
1622 } 1622 }
1623 - srs_freep(pack_field); 1623 + srs_freepa(pack_field);
1624 pack_field = new char[pack_field_length]; 1624 pack_field = new char[pack_field_length];
1625 stream->read_bytes(pack_field, pack_field_length); 1625 stream->read_bytes(pack_field, pack_field_length);
1626 } 1626 }
@@ -1658,7 +1658,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg) @@ -1658,7 +1658,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
1658 srs_error("ts: demux PSE ext field failed. ret=%d", ret); 1658 srs_error("ts: demux PSE ext field failed. ret=%d", ret);
1659 return ret; 1659 return ret;
1660 } 1660 }
1661 - srs_freep(PES_extension_field); 1661 + srs_freepa(PES_extension_field);
1662 PES_extension_field = new char[PES_extension_field_length]; 1662 PES_extension_field = new char[PES_extension_field_length];
1663 stream->read_bytes(PES_extension_field, PES_extension_field_length); 1663 stream->read_bytes(PES_extension_field, PES_extension_field_length);
1664 } 1664 }
@@ -2421,7 +2421,7 @@ SrsTsPayloadPMTESInfo::SrsTsPayloadPMTESInfo(SrsTsStream st, int16_t epid) @@ -2421,7 +2421,7 @@ SrsTsPayloadPMTESInfo::SrsTsPayloadPMTESInfo(SrsTsStream st, int16_t epid)
2421 2421
2422 SrsTsPayloadPMTESInfo::~SrsTsPayloadPMTESInfo() 2422 SrsTsPayloadPMTESInfo::~SrsTsPayloadPMTESInfo()
2423 { 2423 {
2424 - srs_freep(ES_info); 2424 + srs_freepa(ES_info);
2425 } 2425 }
2426 2426
2427 int SrsTsPayloadPMTESInfo::decode(SrsStream* stream) 2427 int SrsTsPayloadPMTESInfo::decode(SrsStream* stream)
@@ -2451,7 +2451,7 @@ int SrsTsPayloadPMTESInfo::decode(SrsStream* stream) @@ -2451,7 +2451,7 @@ int SrsTsPayloadPMTESInfo::decode(SrsStream* stream)
2451 srs_error("ts: demux PMT es info data failed. ret=%d", ret); 2451 srs_error("ts: demux PMT es info data failed. ret=%d", ret);
2452 return ret; 2452 return ret;
2453 } 2453 }
2454 - srs_freep(ES_info); 2454 + srs_freepa(ES_info);
2455 ES_info = new char[ES_info_length]; 2455 ES_info = new char[ES_info_length];
2456 stream->read_bytes(ES_info, ES_info_length); 2456 stream->read_bytes(ES_info, ES_info_length);
2457 } 2457 }
@@ -2508,7 +2508,7 @@ SrsTsPayloadPMT::SrsTsPayloadPMT(SrsTsPacket* p) : SrsTsPayloadPSI(p) @@ -2508,7 +2508,7 @@ SrsTsPayloadPMT::SrsTsPayloadPMT(SrsTsPacket* p) : SrsTsPayloadPSI(p)
2508 2508
2509 SrsTsPayloadPMT::~SrsTsPayloadPMT() 2509 SrsTsPayloadPMT::~SrsTsPayloadPMT()
2510 { 2510 {
2511 - srs_freep(program_info_desc); 2511 + srs_freepa(program_info_desc);
2512 2512
2513 std::vector<SrsTsPayloadPMTESInfo*>::iterator it; 2513 std::vector<SrsTsPayloadPMTESInfo*>::iterator it;
2514 for (it = infos.begin(); it != infos.end(); ++it) { 2514 for (it = infos.begin(); it != infos.end(); ++it) {
@@ -2562,7 +2562,7 @@ int SrsTsPayloadPMT::psi_decode(SrsStream* stream) @@ -2562,7 +2562,7 @@ int SrsTsPayloadPMT::psi_decode(SrsStream* stream)
2562 return ret; 2562 return ret;
2563 } 2563 }
2564 2564
2565 - srs_freep(program_info_desc); 2565 + srs_freepa(program_info_desc);
2566 program_info_desc = new char[program_info_length]; 2566 program_info_desc = new char[program_info_length];
2567 stream->read_bytes(program_info_desc, program_info_length); 2567 stream->read_bytes(program_info_desc, program_info_length);
2568 } 2568 }
@@ -2398,7 +2398,7 @@ int srs_human_print_rtmp_packet4(char type, u_int32_t timestamp, char* data, int @@ -2398,7 +2398,7 @@ int srs_human_print_rtmp_packet4(char type, u_int32_t timestamp, char* data, int
2398 2398
2399 char* amf0_str = NULL; 2399 char* amf0_str = NULL;
2400 srs_human_raw("%s", srs_human_amf0_print(amf0, &amf0_str, NULL)); 2400 srs_human_raw("%s", srs_human_amf0_print(amf0, &amf0_str, NULL));
2401 - srs_freep(amf0_str); 2401 + srs_freepa(amf0_str);
2402 } 2402 }
2403 } else { 2403 } else {
2404 srs_human_trace("Rtmp packet id=%"PRId64"/%.1f/%.1f, type=%#x, dts=%d, pts=%d, ndiff=%d, diff=%d, size=%d", 2404 srs_human_trace("Rtmp packet id=%"PRId64"/%.1f/%.1f, type=%#x, dts=%d, pts=%d, ndiff=%d, diff=%d, size=%d",
@@ -774,7 +774,7 @@ ISrsHttpMessage::ISrsHttpMessage() @@ -774,7 +774,7 @@ ISrsHttpMessage::ISrsHttpMessage()
774 774
775 ISrsHttpMessage::~ISrsHttpMessage() 775 ISrsHttpMessage::~ISrsHttpMessage()
776 { 776 {
777 - srs_freep(_http_ts_send_buffer); 777 + srs_freepa(_http_ts_send_buffer);
778 } 778 }
779 779
780 char* ISrsHttpMessage::http_ts_send_buffer() 780 char* ISrsHttpMessage::http_ts_send_buffer()
@@ -319,8 +319,8 @@ namespace _srs_internal @@ -319,8 +319,8 @@ namespace _srs_internal
319 319
320 key_block::~key_block() 320 key_block::~key_block()
321 { 321 {
322 - srs_freep(random0);  
323 - srs_freep(random1); 322 + srs_freepa(random0);
  323 + srs_freepa(random1);
324 } 324 }
325 325
326 int key_block::parse(SrsStream* stream) 326 int key_block::parse(SrsStream* stream)
@@ -342,7 +342,7 @@ namespace _srs_internal @@ -342,7 +342,7 @@ namespace _srs_internal
342 342
343 random0_size = valid_offset; 343 random0_size = valid_offset;
344 if (random0_size > 0) { 344 if (random0_size > 0) {
345 - srs_freep(random0); 345 + srs_freepa(random0);
346 random0 = new char[random0_size]; 346 random0 = new char[random0_size];
347 stream->read_bytes(random0, random0_size); 347 stream->read_bytes(random0, random0_size);
348 } 348 }
@@ -351,7 +351,7 @@ namespace _srs_internal @@ -351,7 +351,7 @@ namespace _srs_internal
351 351
352 random1_size = 764 - valid_offset - 128 - 4; 352 random1_size = 764 - valid_offset - 128 - 4;
353 if (random1_size > 0) { 353 if (random1_size > 0) {
354 - srs_freep(random1); 354 + srs_freepa(random1);
355 random1 = new char[random1_size]; 355 random1 = new char[random1_size];
356 stream->read_bytes(random1, random1_size); 356 stream->read_bytes(random1, random1_size);
357 } 357 }
@@ -401,8 +401,8 @@ namespace _srs_internal @@ -401,8 +401,8 @@ namespace _srs_internal
401 401
402 digest_block::~digest_block() 402 digest_block::~digest_block()
403 { 403 {
404 - srs_freep(random0);  
405 - srs_freep(random1); 404 + srs_freepa(random0);
  405 + srs_freepa(random1);
406 } 406 }
407 407
408 int digest_block::parse(SrsStream* stream) 408 int digest_block::parse(SrsStream* stream)
@@ -419,7 +419,7 @@ namespace _srs_internal @@ -419,7 +419,7 @@ namespace _srs_internal
419 419
420 random0_size = valid_offset; 420 random0_size = valid_offset;
421 if (random0_size > 0) { 421 if (random0_size > 0) {
422 - srs_freep(random0); 422 + srs_freepa(random0);
423 random0 = new char[random0_size]; 423 random0 = new char[random0_size];
424 stream->read_bytes(random0, random0_size); 424 stream->read_bytes(random0, random0_size);
425 } 425 }
@@ -428,7 +428,7 @@ namespace _srs_internal @@ -428,7 +428,7 @@ namespace _srs_internal
428 428
429 random1_size = 764 - 4 - valid_offset - 32; 429 random1_size = 764 - 4 - valid_offset - 32;
430 if (random1_size > 0) { 430 if (random1_size > 0) {
431 - srs_freep(random1); 431 + srs_freepa(random1);
432 random1 = new char[random1_size]; 432 random1 = new char[random1_size];
433 stream->read_bytes(random1, random1_size); 433 stream->read_bytes(random1, random1_size);
434 } 434 }
@@ -592,7 +592,7 @@ namespace _srs_internal @@ -592,7 +592,7 @@ namespace _srs_internal
592 592
593 c1_digest = new char[SRS_OpensslHashSize]; 593 c1_digest = new char[SRS_OpensslHashSize];
594 if ((ret = openssl_HMACsha256(SrsGenuineFPKey, 30, c1s1_joined_bytes, 1536 - 32, c1_digest)) != ERROR_SUCCESS) { 594 if ((ret = openssl_HMACsha256(SrsGenuineFPKey, 30, c1s1_joined_bytes, 1536 - 32, c1_digest)) != ERROR_SUCCESS) {
595 - srs_freep(c1_digest); 595 + srs_freepa(c1_digest);
596 srs_error("calc digest for c1 failed. ret=%d", ret); 596 srs_error("calc digest for c1 failed. ret=%d", ret);
597 return ret; 597 return ret;
598 } 598 }
@@ -620,7 +620,7 @@ namespace _srs_internal @@ -620,7 +620,7 @@ namespace _srs_internal
620 620
621 s1_digest = new char[SRS_OpensslHashSize]; 621 s1_digest = new char[SRS_OpensslHashSize];
622 if ((ret = openssl_HMACsha256(SrsGenuineFMSKey, 36, c1s1_joined_bytes, 1536 - 32, s1_digest)) != ERROR_SUCCESS) { 622 if ((ret = openssl_HMACsha256(SrsGenuineFMSKey, 36, c1s1_joined_bytes, 1536 - 32, s1_digest)) != ERROR_SUCCESS) {
623 - srs_freep(s1_digest); 623 + srs_freepa(s1_digest);
624 srs_error("calc digest for s1 failed. ret=%d", ret); 624 srs_error("calc digest for s1 failed. ret=%d", ret);
625 return ret; 625 return ret;
626 } 626 }
@@ -40,7 +40,7 @@ SrsMessageArray::~SrsMessageArray() @@ -40,7 +40,7 @@ SrsMessageArray::~SrsMessageArray()
40 // we just free the msgs itself, 40 // we just free the msgs itself,
41 // both delete and delete[] is ok, 41 // both delete and delete[] is ok,
42 // for each msg in msgs is already freed by send_and_free_messages. 42 // for each msg in msgs is already freed by send_and_free_messages.
43 - srs_freep(msgs); 43 + srs_freepa(msgs);
44 } 44 }
45 45
46 void SrsMessageArray::free(int count) 46 void SrsMessageArray::free(int count)
@@ -151,14 +151,14 @@ int SrsPacket::encode(int& psize, char*& ppayload) @@ -151,14 +151,14 @@ int SrsPacket::encode(int& psize, char*& ppayload)
151 151
152 if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) { 152 if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) {
153 srs_error("initialize the stream failed. ret=%d", ret); 153 srs_error("initialize the stream failed. ret=%d", ret);
154 - srs_freep(payload); 154 + srs_freepa(payload);
155 return ret; 155 return ret;
156 } 156 }
157 } 157 }
158 158
159 if ((ret = encode_packet(&stream)) != ERROR_SUCCESS) { 159 if ((ret = encode_packet(&stream)) != ERROR_SUCCESS) {
160 srs_error("encode the packet failed. ret=%d", ret); 160 srs_error("encode the packet failed. ret=%d", ret);
161 - srs_freep(payload); 161 + srs_freepa(payload);
162 return ret; 162 return ret;
163 } 163 }
164 164
@@ -279,7 +279,7 @@ SrsProtocol::~SrsProtocol() @@ -279,7 +279,7 @@ SrsProtocol::~SrsProtocol()
279 SrsChunkStream* cs = cs_cache[i]; 279 SrsChunkStream* cs = cs_cache[i];
280 srs_freep(cs); 280 srs_freep(cs);
281 } 281 }
282 - srs_freep(cs_cache); 282 + srs_freepa(cs_cache);
283 } 283 }
284 284
285 void SrsProtocol::set_auto_response(bool v) 285 void SrsProtocol::set_auto_response(bool v)
@@ -632,7 +632,7 @@ int SrsProtocol::do_send_and_free_packet(SrsPacket* packet, int stream_id) @@ -632,7 +632,7 @@ int SrsProtocol::do_send_and_free_packet(SrsPacket* packet, int stream_id)
632 header.perfer_cid = packet->get_prefer_cid(); 632 header.perfer_cid = packet->get_prefer_cid();
633 633
634 ret = do_simple_send(&header, payload, size); 634 ret = do_simple_send(&header, payload, size);
635 - srs_freep(payload); 635 + srs_freepa(payload);
636 if (ret == ERROR_SUCCESS) { 636 if (ret == ERROR_SUCCESS) {
637 ret = on_send_packet(&header, packet); 637 ret = on_send_packet(&header, packet);
638 } 638 }
@@ -1765,9 +1765,9 @@ SrsHandshakeBytes::SrsHandshakeBytes() @@ -1765,9 +1765,9 @@ SrsHandshakeBytes::SrsHandshakeBytes()
1765 1765
1766 SrsHandshakeBytes::~SrsHandshakeBytes() 1766 SrsHandshakeBytes::~SrsHandshakeBytes()
1767 { 1767 {
1768 - srs_freep(c0c1);  
1769 - srs_freep(s0s1s2);  
1770 - srs_freep(c2); 1768 + srs_freepa(c0c1);
  1769 + srs_freepa(s0s1s2);
  1770 + srs_freepa(c2);
1771 } 1771 }
1772 1772
1773 int SrsHandshakeBytes::read_c0c1(ISrsProtocolReaderWriter* io) 1773 int SrsHandshakeBytes::read_c0c1(ISrsProtocolReaderWriter* io)
@@ -217,7 +217,7 @@ int srs_rtmp_create_msg(char type, u_int32_t timestamp, char* data, int size, in @@ -217,7 +217,7 @@ int srs_rtmp_create_msg(char type, u_int32_t timestamp, char* data, int size, in
217 217
218 // only when failed, we must free the data. 218 // only when failed, we must free the data.
219 if ((ret = srs_do_rtmp_create_msg(type, timestamp, data, size, stream_id, ppmsg)) != ERROR_SUCCESS) { 219 if ((ret = srs_do_rtmp_create_msg(type, timestamp, data, size, stream_id, ppmsg)) != ERROR_SUCCESS) {
220 - srs_freep(data); 220 + srs_freepa(data);
221 return ret; 221 return ret;
222 } 222 }
223 223