winlin

fix mem leak in recv message error, always free msg

@@ -454,7 +454,6 @@ int SrsRtmpClient::connect_app(string app, string tc_url) @@ -454,7 +454,6 @@ int SrsRtmpClient::connect_app(string app, string tc_url)
454 if (true) { 454 if (true) {
455 SrsConnectAppPacket* pkt = new SrsConnectAppPacket(); 455 SrsConnectAppPacket* pkt = new SrsConnectAppPacket();
456 456
457 - pkt->command_object = SrsAmf0Any::object();  
458 pkt->command_object->set("app", SrsAmf0Any::str(app.c_str())); 457 pkt->command_object->set("app", SrsAmf0Any::str(app.c_str()));
459 pkt->command_object->set("swfUrl", SrsAmf0Any::str()); 458 pkt->command_object->set("swfUrl", SrsAmf0Any::str());
460 pkt->command_object->set("tcUrl", SrsAmf0Any::str(tc_url.c_str())); 459 pkt->command_object->set("tcUrl", SrsAmf0Any::str(tc_url.c_str()));
@@ -382,6 +382,7 @@ int SrsProtocol::recv_message(SrsMessage** pmsg) @@ -382,6 +382,7 @@ int SrsProtocol::recv_message(SrsMessage** pmsg)
382 if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) { 382 if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) {
383 srs_error("recv interlaced message failed. ret=%d", ret); 383 srs_error("recv interlaced message failed. ret=%d", ret);
384 } 384 }
  385 + srs_freep(msg);
385 return ret; 386 return ret;
386 } 387 }
387 srs_verbose("entire msg received"); 388 srs_verbose("entire msg received");
@@ -477,6 +477,10 @@ protected: @@ -477,6 +477,10 @@ protected:
477 public: 477 public:
478 std::string command_name; 478 std::string command_name;
479 double transaction_id; 479 double transaction_id;
  480 + /**
  481 + * alloc in packet constructor,
  482 + * so, directly use it, never alloc again.
  483 + */
480 SrsAmf0Object* command_object; 484 SrsAmf0Object* command_object;
481 public: 485 public:
482 SrsConnectAppPacket(); 486 SrsConnectAppPacket();