BUG/MEDIUM: fd: Call fd_stop_recv() when we just got a fd.

In fd_takeover(), when a double-width compare-and-swap is implemented,
make sure, if we managed to get the fd, to call fd_stop_recv() on it, so
that the thread that used to own it will know it has to stop polling it.
This commit is contained in:
Olivier Houchard 2020-06-17 20:34:05 +02:00
parent 8d7b517824
commit ddc874c46c

View File

@ -389,6 +389,12 @@ end:
} while (!(_HA_ATOMIC_DWCAS(&fdtab[fd].running_mask, &old_masks,
&new_masks)));
_HA_ATOMIC_AND(&fdtab[fd].running_mask, ~tid_bit);
/* Make sure the FD doesn't have the active bit. It is possible that
* the fd is polled by the thread that used to own it, the new thread
* is supposed to call subscribe() later, to activate polling.
*/
fd_stop_recv(fd);
return 0;
#endif /* HW_HAVE_CAS_DW */
}