Addition of code to prevent multiple hangup's beign processed on the same

DCB
This commit is contained in:
Mark Riddoch 2014-09-19 11:40:16 +01:00
parent 2402d55de6
commit 2d2fc28b07
2 changed files with 23 additions and 4 deletions

View File

@ -620,7 +620,15 @@ DCB *zombies = NULL;
eno,
strerror(eno))));
atomic_add(&pollStats.n_hup, 1);
dcb->func.hangup(dcb);
spinlock_acquire(&dcb->dcb_initlock);
if ((dcb->flags & DCBF_HUNG) == 0)
{
dcb->flags |= DCBF_HUNG;
spinlock_release(&dcb->dcb_initlock);
dcb->func.hangup(dcb);
}
else
spinlock_release(&dcb->dcb_initlock);
}
if (ev & EPOLLRDHUP)
@ -639,7 +647,15 @@ DCB *zombies = NULL;
eno,
strerror(eno))));
atomic_add(&pollStats.n_hup, 1);
dcb->func.hangup(dcb);
spinlock_acquire(&dcb->dcb_initlock);
if ((dcb->flags & DCBF_HUNG) == 0)
{
dcb->flags |= DCBF_HUNG;
spinlock_release(&dcb->dcb_initlock);
dcb->func.hangup(dcb);
}
else
spinlock_release(&dcb->dcb_initlock);
}
} /*< for */
no_op = FALSE;

View File

@ -317,6 +317,9 @@ void dcb_call_foreach (DCB_REASON reason);
void dcb_call_foreach (
DCB_REASON reason);
/* DCB flags values */
#define DCBF_CLONE 0x0001 /* DCB is a clone */
/**
* DCB flags values
*/
#define DCBF_CLONE 0x0001 /*< DCB is a clone */
#define DCBF_HUNG 0x0002 /*< Hangup has been dispatched */
#endif /* _DCB_H */