Do not manipulate read queue directly
Protocol modules should not manupulate the read queue directly, but always access it via the functions created for that purpose.
This commit is contained in:
@ -707,7 +707,7 @@ gw_read_and_write(DCB *dcb)
|
|||||||
GWBUF *tmp = modutil_get_complete_packets(&read_buffer);
|
GWBUF *tmp = modutil_get_complete_packets(&read_buffer);
|
||||||
/* Put any residue into the read queue */
|
/* Put any residue into the read queue */
|
||||||
|
|
||||||
dcb->dcb_readqueue = read_buffer;
|
dcb_readq_set(dcb, read_buffer);
|
||||||
|
|
||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
{
|
{
|
||||||
@ -742,7 +742,7 @@ gw_read_and_write(DCB *dcb)
|
|||||||
bool more = false;
|
bool more = false;
|
||||||
if (modutil_count_signal_packets(read_buffer, 0, &more, NULL) != 2)
|
if (modutil_count_signal_packets(read_buffer, 0, &more, NULL) != 2)
|
||||||
{
|
{
|
||||||
dcb->dcb_readqueue = gwbuf_append(read_buffer, dcb->dcb_readqueue);
|
dcb_readq_prepend(dcb, read_buffer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -755,7 +755,7 @@ gw_read_and_write(DCB *dcb)
|
|||||||
{
|
{
|
||||||
if (!complete_ps_response(read_buffer))
|
if (!complete_ps_response(read_buffer))
|
||||||
{
|
{
|
||||||
dcb->dcb_readqueue = gwbuf_append(read_buffer, dcb->dcb_readqueue);
|
dcb_readq_prepend(dcb, read_buffer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -829,7 +829,7 @@ gw_read_and_write(DCB *dcb)
|
|||||||
if (!sescmd_response_complete(dcb))
|
if (!sescmd_response_complete(dcb))
|
||||||
{
|
{
|
||||||
stmt = gwbuf_append(stmt, read_buffer);
|
stmt = gwbuf_append(stmt, read_buffer);
|
||||||
dcb->dcb_readqueue = gwbuf_append(stmt, dcb->dcb_readqueue);
|
dcb_readq_prepend(dcb, stmt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1586,7 +1586,7 @@ static GWBUF* process_response_data(DCB* dcb,
|
|||||||
/** Store the already read data into the readqueue of the DCB
|
/** Store the already read data into the readqueue of the DCB
|
||||||
* and restore the response status to the initial number of packets */
|
* and restore the response status to the initial number of packets */
|
||||||
|
|
||||||
dcb->dcb_readqueue = gwbuf_append(outbuf, dcb->dcb_readqueue);
|
dcb_readq_prepend(dcb, outbuf);
|
||||||
|
|
||||||
protocol_set_response_status(p, initial_packets, initial_bytes);
|
protocol_set_response_status(p, initial_packets, initial_bytes);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -499,7 +499,7 @@ int gw_read_client_event(DCB* dcb)
|
|||||||
(0 != max_bytes && nbytes_read < max_bytes))
|
(0 != max_bytes && nbytes_read < max_bytes))
|
||||||
{
|
{
|
||||||
|
|
||||||
dcb->dcb_readqueue = read_buffer;
|
dcb_readq_set(dcb, read_buffer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -747,7 +747,7 @@ gw_read_do_authentication(DCB *dcb, GWBUF *read_buffer, int nbytes_read)
|
|||||||
static GWBUF* split_and_store(DCB *client_dcb, GWBUF* queue, int offset)
|
static GWBUF* split_and_store(DCB *client_dcb, GWBUF* queue, int offset)
|
||||||
{
|
{
|
||||||
GWBUF* newbuf = gwbuf_split(&queue, offset);
|
GWBUF* newbuf = gwbuf_split(&queue, offset);
|
||||||
dcb_append_readqueue(client_dcb, queue);
|
dcb_readq_append(client_dcb, queue);
|
||||||
return newbuf;
|
return newbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,7 +794,7 @@ static bool process_client_commands(DCB* dcb, int bytes_available, GWBUF** buffe
|
|||||||
/** Make sure we have enough data if the client is sending a new command */
|
/** Make sure we have enough data if the client is sending a new command */
|
||||||
if (protocol_is_idle(dcb) && bytes_available < MYSQL_HEADER_LEN)
|
if (protocol_is_idle(dcb) && bytes_available < MYSQL_HEADER_LEN)
|
||||||
{
|
{
|
||||||
dcb_append_readqueue(dcb, queue);
|
dcb_readq_append(dcb, queue);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -982,7 +982,7 @@ gw_read_normal_data(DCB *dcb, GWBUF *read_buffer, int nbytes_read)
|
|||||||
if (nbytes_read < 3 || nbytes_read <
|
if (nbytes_read < 3 || nbytes_read <
|
||||||
(int)(MYSQL_GET_PAYLOAD_LEN((uint8_t *) GWBUF_DATA(read_buffer)) + 4))
|
(int)(MYSQL_GET_PAYLOAD_LEN((uint8_t *) GWBUF_DATA(read_buffer)) + 4))
|
||||||
{
|
{
|
||||||
dcb->dcb_readqueue = read_buffer;
|
dcb_readq_set(dcb, read_buffer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -998,7 +998,7 @@ gw_read_normal_data(DCB *dcb, GWBUF *read_buffer, int nbytes_read)
|
|||||||
switch (res)
|
switch (res)
|
||||||
{
|
{
|
||||||
case RES_MORE_DATA:
|
case RES_MORE_DATA:
|
||||||
dcb->dcb_readqueue = read_buffer;
|
dcb_readq_set(dcb, read_buffer);
|
||||||
rval = 0;
|
rval = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1052,7 +1052,7 @@ gw_read_finish_processing(DCB *dcb, GWBUF *read_buffer, uint64_t capabilities)
|
|||||||
/* Must have been data left over */
|
/* Must have been data left over */
|
||||||
/* Add incomplete mysql packet to read queue */
|
/* Add incomplete mysql packet to read queue */
|
||||||
|
|
||||||
dcb->dcb_readqueue = gwbuf_append(dcb->dcb_readqueue, read_buffer);
|
dcb_readq_append(dcb, read_buffer);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1557,11 +1557,11 @@ return_rc:
|
|||||||
*/
|
*/
|
||||||
static bool ensure_complete_packet(DCB *dcb, GWBUF **read_buffer, int nbytes_read)
|
static bool ensure_complete_packet(DCB *dcb, GWBUF **read_buffer, int nbytes_read)
|
||||||
{
|
{
|
||||||
if (dcb->dcb_readqueue)
|
if (dcb_readq_has(dcb))
|
||||||
{
|
{
|
||||||
dcb->dcb_readqueue = gwbuf_append(dcb->dcb_readqueue, *read_buffer);
|
dcb_readq_append(dcb, *read_buffer);
|
||||||
nbytes_read = gwbuf_length(dcb->dcb_readqueue);
|
nbytes_read = dcb_readq_length(dcb);
|
||||||
int plen = MYSQL_GET_PAYLOAD_LEN((uint8_t *) GWBUF_DATA(dcb->dcb_readqueue));
|
int plen = MYSQL_GET_PAYLOAD_LEN((uint8_t *) GWBUF_DATA(dcb_readq_get(dcb)));
|
||||||
|
|
||||||
if (nbytes_read < 3 || nbytes_read < plen + 4)
|
if (nbytes_read < 3 || nbytes_read < plen + 4)
|
||||||
{
|
{
|
||||||
@ -1573,8 +1573,7 @@ static bool ensure_complete_packet(DCB *dcb, GWBUF **read_buffer, int nbytes_rea
|
|||||||
* There is at least one complete mysql packet in
|
* There is at least one complete mysql packet in
|
||||||
* read_buffer.
|
* read_buffer.
|
||||||
*/
|
*/
|
||||||
*read_buffer = dcb->dcb_readqueue;
|
*read_buffer = dcb_readq_release(dcb);
|
||||||
dcb->dcb_readqueue = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1583,7 +1582,7 @@ static bool ensure_complete_packet(DCB *dcb, GWBUF **read_buffer, int nbytes_rea
|
|||||||
|
|
||||||
if (nbytes_read < 3 || nbytes_read < (int)MYSQL_GET_PAYLOAD_LEN(data) + 4)
|
if (nbytes_read < 3 || nbytes_read < (int)MYSQL_GET_PAYLOAD_LEN(data) + 4)
|
||||||
{
|
{
|
||||||
dcb->dcb_readqueue = gwbuf_append(dcb->dcb_readqueue, *read_buffer);
|
dcb_readq_append(dcb, *read_buffer);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -981,8 +981,7 @@ bool read_complete_packet(DCB *dcb, GWBUF **readbuf)
|
|||||||
{
|
{
|
||||||
/** Store any extra data in the DCB's readqueue */
|
/** Store any extra data in the DCB's readqueue */
|
||||||
|
|
||||||
dcb->dcb_readqueue = gwbuf_append(dcb->dcb_readqueue, localbuf);
|
dcb_readq_append(dcb, localbuf);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user