[rabbitmq-discuss] rabbitmq-c amqp_tx_commit leak memory

Haster haster2004 at yandex.ru
Mon Jul 1 14:08:19 BST 2013


Hi there!

I try to use transactions in my producer. And I found that when I send many
messages - my app eat a lot of memory.

If I dismiss transaction feature - memory consumption is normal

Maybe there is memory leak in amqp_tx_commit? Or maybe I have to call some
function to clean something?

my test case is below:
const char * const host = "localhost";
int port = 5672;
const char * const user = "admin";
const char * const pass = "password";
amqp_channel_t channel_exchange = 4;
amqp_channel_t channel_queue = 5;
const char *exchange = "haster_ex";  

void main () {
  amqp_connection_state_t conn = amqp_new_connection();
  if (!conn) { cout << "Connection error\n"; return;
  }

  int sockfd = amqp_open_socket(host, port);  //5672
  if (sockfd < 0) { cout << "Opening socket error\n"; return;  }

  amqp_set_sockfd(conn, sockfd);
  
  amqp_rpc_reply_t reply = amqp_login(conn, "/", 0, 131072, 0,
AMQP_SASL_METHOD_PLAIN, user, pass);
  if (reply.reply_type != AMQP_RESPONSE_NORMAL)
{amqp_destroy_connection(conn); cout << "Login error\n"; return;}

  amqp_channel_open(conn, channel_exchange);
  amqp_rpc_reply_t res = amqp_get_rpc_reply(conn);
  if (res.reply_type != AMQP_RESPONSE_NORMAL) {cout << "Channel open
error\n"; amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);return;}


*  amqp_tx_select(conn, channel_exchange);   // If comment this - all is OK*
  res = amqp_get_rpc_reply(conn);
  if (res.reply_type != AMQP_RESPONSE_NORMAL) {cout << "Select error\n";
amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);return;}

  amqp_bytes_t message_bytes, routingKey_bytes, exchange_bytes;
  exchange_bytes.bytes = (void*)exchange;
  exchange_bytes.len = strlen(exchange);
  message_bytes.bytes = (void*)"Privrr";
  message_bytes.len = 6;
  routingKey_bytes.bytes = (void*)"key";
  routingKey_bytes.len = 3;
  amqp_basic_properties_t props;
  props._flags |= AMQP_BASIC_DELIVERY_MODE_FLAG;
  props.delivery_mode = 2;
  props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG;
  props.content_type = amqp_cstring_bytes("text/plain");

  amqp_bytes_t expiration;
  expiration.bytes = (void*)"1000";
  expiration.len = 4;
  props.expiration = expiration;
  props._flags |= AMQP_BASIC_EXPIRATION_FLAG;

  while (1) {
    int r = amqp_basic_publish(conn, channel_exchange, exchange_bytes,
routingKey_bytes,  1, 0, &props, message_bytes);

*    amqp_tx_commit(conn, channel_exchange);  // if comment it - all is OK
    amqp_get_rpc_reply(conn);*
    //die_on_amqp_error(amqp_get_rpc_reply(conn), "Commit error");
  }
  char ch;
  cin >> ch;
}





--
View this message in context: http://rabbitmq.1065348.n5.nabble.com/rabbitmq-c-amqp-tx-commit-leak-memory-tp27717.html
Sent from the RabbitMQ mailing list archive at Nabble.com.


More information about the rabbitmq-discuss mailing list