No idea, but you are creating a new UV loop for each request to send! not sure if you are releasing them after used. Anyhow I cannot help too much with that design as IMHO it makes no sense at all to create a UV loop for each action in your program.
2014-07-06 22:06 GMT+02:00 Claudio Bisegni <[email protected]>: > Hi, > i have the same setup of last my post. I have a class that need to send > different message to a different server. So here is a queue of message and > some thread that call the follow method: > > void TCPUVClient::processBufferElement(NetworkForwardInfo *messageInfo, > ElementManagingPolicy& elementPolicy) throw(CException) { > > struct sockaddr_in req_addr; > > std::vector<std::string> server_desc_tokens; > > boost::algorithm::split(server_desc_tokens, messageInfo->destinationAddr, > boost::algorithm::is_any_of(":"), boost::algorithm::token_compress_on); > > uv_ip4_addr(server_desc_tokens[0].c_str(), > boost::lexical_cast<int>(server_desc_tokens[1]), &req_addr); > > > uv_loop_t client_loop; > > uv_tcp_t tcp_connection; > > uv_loop_init(&client_loop); > > uv_tcp_init(&client_loop, &tcp_connection); > > uv_tcp_keepalive(&tcp_connection, 1, 60); > > > > //prepare the data param of handle > > RequestInfo * ri = (RequestInfo*)std::calloc(1, sizeof(RequestInfo)); > > ri->messageInfo = messageInfo; > > //exec thennection > > tcp_connection.data = static_cast<void*>(ri); > > //start the connection > > uv_connect_t *conn = (uv_connect_t*)malloc(sizeof(uv_connect_t)); > > uv_tcp_connect(conn, &tcp_connection, (const struct sockaddr*)&req_addr, > TCPUVClient::on_connect); > > uv_run(&client_loop, UV_RUN_DEFAULT); > > uv_loop_close(&client_loop); > > } > > > I'm trying the case where the server is down so the on_connect method is > called with status in error. > > > void TCPUVClient::on_connect(uv_connect_t *connection, int status) { > > TCPUVClientLDBG << "on_connect " << status; > > RequestInfo *ri = static_cast<RequestInfo*>(connection->handle->data); > > if (status) { > > TCPUVClientLERR << "error on_connect" << uv_strerror(status); > > switch (status) { > > case ECONNREFUSED: > > TCPUVClientLERR << "ECONNREFUSED"; > > break; > > default: > > break; > > } > > uv_close((uv_handle_t*)connection->handle,TCPUVClient::on_close); > > } else { > > //get the data to send > > ri->serializationBuffer = ri->messageInfo->message->getBSONData(); > > > > //initialize uv buffer > > uv_buf_t buf = > uv_buf_init((char*)ri->serializationBuffer->getBufferPtr(), (unsigned > int)ri->serializationBuffer->getBufferLen()); > > > > uv_write_t *request = (uv_write_t*)malloc(sizeof(uv_write_t)); > > uv_write(request, connection->handle, &buf, 1, > TCPUVClient::on_write_end); > > } > > free(connection); > > } > > > the last callback called is on close > > > void TCPUVClient::on_close(uv_handle_t* handle) { > > LDBG_ << "TCPUVClient::on_close"; > > RequestInfo *ri = static_cast<RequestInfo*>(handle->data); > > //free(handle); > > DEALLOCATE_REQUEST_INFO(ri) > > } > > > the DEALLOCATE_REQUEST_INFO macro erase all RequestInfo memory. > > > All seems to work well except that after many connection all seems to slow > down very fast... after on minute the process hang for some seconds then > began to work again. > > > All memory is released an no leak are found. Any hints? > > > thanks in advanced > > claudio > > -- > You received this message because you are subscribed to the Google Groups > "libuv" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/libuv. > For more options, visit https://groups.google.com/d/optout. -- Iñaki Baz Castillo <[email protected]> -- You received this message because you are subscribed to the Google Groups "libuv" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/libuv. For more options, visit https://groups.google.com/d/optout.
