dcb.c:dcb_close prevent redundant execution of dcb_close for one DCB

This commit is contained in:
VilhoRaatikka 2014-11-03 22:07:54 +02:00
parent ca816743e8
commit 6ed8836b15
2 changed files with 22 additions and 17 deletions

View File

@ -1161,23 +1161,28 @@ dcb_close(DCB *dcb)
dcb,
STRDCBSTATE(dcb->state))));
}
if (rc == 0)
{
/**
* close protocol and router session
*/
if (dcb->func.close != NULL)
{
dcb->func.close(dcb);
}
dcb_call_callback(dcb, DCB_REASON_CLOSE);
if (dcb->state == DCB_STATE_NOPOLLING)
{
dcb_add_to_zombieslist(dcb);
}
}
}
ss_dassert(dcb->state == DCB_STATE_NOPOLLING ||
dcb->state == DCB_STATE_ZOMBIE);
/**
* close protocol and router session
*/
if (dcb->func.close != NULL)
{
dcb->func.close(dcb);
}
dcb_call_callback(dcb, DCB_REASON_CLOSE);
if (dcb->state == DCB_STATE_NOPOLLING)
{
dcb_add_to_zombieslist(dcb);
}
dcb->state == DCB_STATE_ZOMBIE);
}
/**

View File

@ -292,7 +292,8 @@ poll_remove_dcb(DCB *dcb)
CHK_DCB(dcb);
/*< It is possible that dcb has already been removed from the set */
if (dcb->state != DCB_STATE_POLLING) {
if (dcb->state != DCB_STATE_POLLING)
{
if (dcb->state == DCB_STATE_NOPOLLING ||
dcb->state == DCB_STATE_ZOMBIE)
{
@ -300,7 +301,6 @@ poll_remove_dcb(DCB *dcb)
}
goto return_rc;
}
/*<
* Set state to NOPOLLING and remove dcb from poll set.
*/