From 66dbb8ec2342a320362a767f509d3c52ad42176c Mon Sep 17 00:00:00 2001 From: vraatikka Date: Mon, 14 Oct 2013 15:12:30 +0300 Subject: [PATCH] dcb.c dcb_write, if write failed, gwbuf wasn't freed. mysql_backend.c gw_MySQLWrite_backend, if dcb wasn'r in POLLING state then write was skpiped but gwbuf wasn't freed. mysql_client.c gw_MySQLWrite_client, disabled the use of dcb_write because it returns different values than the code it replaced. Also removed erroneous call of gwbuf_consume. mysql_common.c mysql_send_custom_error, removed erroneous call of gwbuf_free. --- server/core/dcb.c | 1 + server/modules/protocol/mysql_backend.c | 3 +++ server/modules/protocol/mysql_client.c | 4 +--- server/modules/protocol/mysql_common.c | 1 - 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index 8a04c9b3c..0551b4aaf 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -751,6 +751,7 @@ int w, saved_errno = 0; if (queue && (saved_errno != EAGAIN || saved_errno != EWOULDBLOCK)) { + queue = gwbuf_consume(queue, gwbuf_length(queue)); skygw_log_write_flush( LOGFILE_ERROR, "Error : Writing to %s socket failed due %d, %s.", diff --git a/server/modules/protocol/mysql_backend.c b/server/modules/protocol/mysql_backend.c index 354433567..54a16d54a 100644 --- a/server/modules/protocol/mysql_backend.c +++ b/server/modules/protocol/mysql_backend.c @@ -472,6 +472,9 @@ gw_MySQLWrite_backend(DCB *dcb, GWBUF *queue) * Don't write to backend if backend_dcb is not in poll set anymore. */ if (dcb->state != DCB_STATE_POLLING) { + /** Free buffer memory */ + gwbuf_consume(queue, GWBUF_LENGTH(queue)); + skygw_log_write_flush( LOGFILE_ERROR, "%lu [gw_MySQLWrite_backend] Write to backend failed. " diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index ccd810e51..82a4c7847 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -433,7 +433,7 @@ static int gw_mysql_do_authentication(DCB *dcb, GWBUF *queue) { int gw_MySQLWrite_client(DCB *dcb, GWBUF *queue) { -#if 1 +#if 0 return dcb_write(dcb, queue); #else int w, saved_errno = 0; @@ -762,8 +762,6 @@ int gw_read_client_event(DCB* dcb) { protocol->state = MYSQL_IDLE; } } - /** Free buffer */ - queue = gwbuf_consume(queue, len); goto return_rc; } /* MYSQL_IDLE */ break; diff --git a/server/modules/protocol/mysql_common.c b/server/modules/protocol/mysql_common.c index d6cd5ee12..a1e602083 100644 --- a/server/modules/protocol/mysql_common.c +++ b/server/modules/protocol/mysql_common.c @@ -805,7 +805,6 @@ mysql_send_custom_error (DCB *dcb, int packet_number, int in_affected_rows, cons // writing data in the Client buffer queue dcb->func.write(dcb, buf); - gwbuf_free(buf); return sizeof(mysql_packet_header) + mysql_payload_size; }