Addition of code to prevent multiple hangup's beign processed on the same
DCB
This commit is contained in:
@ -620,7 +620,15 @@ DCB *zombies = NULL;
|
|||||||
eno,
|
eno,
|
||||||
strerror(eno))));
|
strerror(eno))));
|
||||||
atomic_add(&pollStats.n_hup, 1);
|
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)
|
if (ev & EPOLLRDHUP)
|
||||||
@ -639,7 +647,15 @@ DCB *zombies = NULL;
|
|||||||
eno,
|
eno,
|
||||||
strerror(eno))));
|
strerror(eno))));
|
||||||
atomic_add(&pollStats.n_hup, 1);
|
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 */
|
} /*< for */
|
||||||
no_op = FALSE;
|
no_op = FALSE;
|
||||||
|
|||||||
@ -317,6 +317,9 @@ void dcb_call_foreach (DCB_REASON reason);
|
|||||||
void dcb_call_foreach (
|
void dcb_call_foreach (
|
||||||
DCB_REASON reason);
|
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 */
|
#endif /* _DCB_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user