Move fake events to a thread-specific queue
The fake poll events are now stored in thread specific queues. This removes the need for the poll event queue.
This commit is contained in:
@ -420,7 +420,11 @@ dcb_free_all_memory(DCB *dcb)
|
||||
gwbuf_free(dcb->dcb_readqueue);
|
||||
dcb->dcb_readqueue = NULL;
|
||||
}
|
||||
|
||||
if (dcb->dcb_fakequeue)
|
||||
{
|
||||
gwbuf_free(dcb->dcb_fakequeue);
|
||||
dcb->dcb_fakequeue = NULL;
|
||||
}
|
||||
spinlock_acquire(&dcb->cb_lock);
|
||||
while ((cb_dcb = dcb->callbacks) != NULL)
|
||||
{
|
||||
@ -913,11 +917,15 @@ int dcb_read(DCB *dcb,
|
||||
|
||||
if (dcb->dcb_readqueue)
|
||||
{
|
||||
spinlock_acquire(&dcb->authlock);
|
||||
*head = gwbuf_append(*head, dcb->dcb_readqueue);
|
||||
dcb->dcb_readqueue = NULL;
|
||||
nreadtotal = gwbuf_length(*head);
|
||||
spinlock_release(&dcb->authlock);
|
||||
}
|
||||
else if (dcb->dcb_fakequeue)
|
||||
{
|
||||
*head = gwbuf_append(*head, dcb->dcb_fakequeue);
|
||||
dcb->dcb_fakequeue = NULL;
|
||||
nreadtotal = gwbuf_length(*head);
|
||||
}
|
||||
|
||||
if (SSL_HANDSHAKE_DONE == dcb->ssl_state || SSL_ESTABLISHED == dcb->ssl_state)
|
||||
@ -1661,7 +1669,7 @@ dcb_grab_writeq(DCB *dcb, bool first_time)
|
||||
|
||||
if (first_time && dcb->ssl_read_want_write)
|
||||
{
|
||||
poll_fake_event(dcb, EPOLLIN);
|
||||
poll_fake_read_event(dcb);
|
||||
}
|
||||
|
||||
if (first_time && dcb->draining_flag)
|
||||
@ -3554,7 +3562,5 @@ dcb_role_name(DCB *dcb)
|
||||
*/
|
||||
void dcb_append_readqueue(DCB *dcb, GWBUF *buffer)
|
||||
{
|
||||
spinlock_acquire(&dcb->authlock);
|
||||
dcb->dcb_readqueue = gwbuf_append(dcb->dcb_readqueue, buffer);
|
||||
spinlock_release(&dcb->authlock);
|
||||
}
|
||||
|
Reference in New Issue
Block a user