Try different code, continue polling while not in use.
This commit is contained in:
@ -281,32 +281,17 @@ dcb_add_to_zombieslist(DCB *dcb)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *user;
|
/*<
|
||||||
user = session_getUser(dcb->session);
|
* Add closing dcb to the top of the list.
|
||||||
if (user && dcb->server)
|
*/
|
||||||
{
|
dcb->memdata.next = zombies;
|
||||||
dcb->user = strdup(user);
|
zombies = dcb;
|
||||||
spinlock_acquire(&dcb->server->persistlock);
|
/*<
|
||||||
dcb->nextpersistent = dcb->server->persistent;
|
* Set state which indicates that it has been added to zombies
|
||||||
dcb->server->persistent = dcb;
|
* list.
|
||||||
spinlock_release(&dcb->server->persistlock);
|
*/
|
||||||
atomic_add(&dcb->server->stats.n_persistent, 1);
|
succp = dcb_set_state(dcb, DCB_STATE_ZOMBIE, &prev_state);
|
||||||
}
|
ss_info_dassert(succp, "Failed to set DCB_STATE_ZOMBIE");
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*<
|
|
||||||
* Add closing dcb to the top of the list.
|
|
||||||
*/
|
|
||||||
dcb->memdata.next = zombies;
|
|
||||||
zombies = dcb;
|
|
||||||
/*<
|
|
||||||
* Set state which indicates that it has been added to zombies
|
|
||||||
* list.
|
|
||||||
*/
|
|
||||||
succp = dcb_set_state(dcb, DCB_STATE_ZOMBIE, &prev_state);
|
|
||||||
ss_info_dassert(succp, "Failed to set DCB_STATE_ZOMBIE");
|
|
||||||
}
|
|
||||||
|
|
||||||
spinlock_release(&zombiespin);
|
spinlock_release(&zombiespin);
|
||||||
}
|
}
|
||||||
@ -1300,7 +1285,20 @@ dcb_close(DCB *dcb)
|
|||||||
*/
|
*/
|
||||||
if (dcb->state == DCB_STATE_POLLING)
|
if (dcb->state == DCB_STATE_POLLING)
|
||||||
{
|
{
|
||||||
rc = poll_remove_dcb(dcb);
|
char *user;
|
||||||
|
user = session_getUser(dcb->session);
|
||||||
|
if (user && dcb->server)
|
||||||
|
{
|
||||||
|
dcb->user = strdup(user);
|
||||||
|
spinlock_acquire(&dcb->server->persistlock);
|
||||||
|
dcb->nextpersistent = dcb->server->persistent;
|
||||||
|
dcb->server->persistent = dcb;
|
||||||
|
spinlock_release(&dcb->server->persistlock);
|
||||||
|
atomic_add(&dcb->server->stats.n_persistent, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = poll_remove_dcb(dcb);
|
||||||
|
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
LOGIF(LD, (skygw_log_write(
|
LOGIF(LD, (skygw_log_write(
|
||||||
@ -1358,7 +1356,7 @@ printDCB(DCB *dcb)
|
|||||||
printf("\tUsername to: %s\n", dcb->user);
|
printf("\tUsername to: %s\n", dcb->user);
|
||||||
if (dcb->writeq)
|
if (dcb->writeq)
|
||||||
printf("\tQueued write data: %d\n",gwbuf_length(dcb->writeq));
|
printf("\tQueued write data: %d\n",gwbuf_length(dcb->writeq));
|
||||||
char *statusname = server_status(dcb->dcb_server_status);
|
char *statusname = server_status(dcb->server);
|
||||||
if (statusname)
|
if (statusname)
|
||||||
{
|
{
|
||||||
printf("\tServer status: %s\n", statusname);
|
printf("\tServer status: %s\n", statusname);
|
||||||
@ -1450,7 +1448,7 @@ DCB *dcb;
|
|||||||
if (dcb->writeq)
|
if (dcb->writeq)
|
||||||
dcb_printf(pdcb, "\tQueued write data: %d\n",
|
dcb_printf(pdcb, "\tQueued write data: %d\n",
|
||||||
gwbuf_length(dcb->writeq));
|
gwbuf_length(dcb->writeq));
|
||||||
char *statusname = server_status(dcb->dcb_server_status);
|
char *statusname = server_status(dcb->server);
|
||||||
if (statusname)
|
if (statusname)
|
||||||
{
|
{
|
||||||
dcb_printf(pdcb, "\tServer status: %s\n", statusname);
|
dcb_printf(pdcb, "\tServer status: %s\n", statusname);
|
||||||
@ -1565,7 +1563,7 @@ dprintDCB(DCB *pdcb, DCB *dcb)
|
|||||||
dcb_printf(pdcb, "\tQueued write data: %d\n", gwbuf_length(dcb->writeq));
|
dcb_printf(pdcb, "\tQueued write data: %d\n", gwbuf_length(dcb->writeq));
|
||||||
if (dcb->delayq)
|
if (dcb->delayq)
|
||||||
dcb_printf(pdcb, "\tDelayed write data: %d\n", gwbuf_length(dcb->delayq));
|
dcb_printf(pdcb, "\tDelayed write data: %d\n", gwbuf_length(dcb->delayq));
|
||||||
char *statusname = server_status(dcb->dcb_server_status);
|
char *statusname = server_status(dcb->server);
|
||||||
if (statusname)
|
if (statusname)
|
||||||
{
|
{
|
||||||
dcb_printf(pdcb, "\tServer status: %s\n", statusname);
|
dcb_printf(pdcb, "\tServer status: %s\n", statusname);
|
||||||
|
|||||||
@ -547,7 +547,7 @@ server_status(SERVER *server)
|
|||||||
{
|
{
|
||||||
char *status = NULL;
|
char *status = NULL;
|
||||||
|
|
||||||
if ((status = (char *)malloc(256)) == NULL)
|
if (NULL == server || (status = (char *)malloc(256)) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
status[0] = 0;
|
status[0] = 0;
|
||||||
if (server->status & SERVER_MAINT)
|
if (server->status & SERVER_MAINT)
|
||||||
|
|||||||
Reference in New Issue
Block a user