|
@@ -930,8 +930,15 @@ errxit:
|
|
|
* inside the main ready-list here.
|
|
|
*/
|
|
|
for (nepi = ep->ovflist; (epi = nepi) != NULL;
|
|
|
- nepi = epi->next, epi->next = EP_UNACTIVE_PTR)
|
|
|
- list_add_tail(&epi->rdllink, &ep->rdllist);
|
|
|
+ nepi = epi->next, epi->next = EP_UNACTIVE_PTR) {
|
|
|
+ /*
|
|
|
+ * If the above loop quit with errors, the epoll item might still
|
|
|
+ * be linked to "txlist", and the list_splice() done below will
|
|
|
+ * take care of those cases.
|
|
|
+ */
|
|
|
+ if (!ep_is_linked(&epi->rdllink))
|
|
|
+ list_add_tail(&epi->rdllink, &ep->rdllist);
|
|
|
+ }
|
|
|
/*
|
|
|
* We need to set back ep->ovflist to EP_UNACTIVE_PTR, so that after
|
|
|
* releasing the lock, events will be queued in the normal way inside
|