mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +02:00
MINOR: fd: make updt_fd_polling() a normal function
It's called from many places, better use a real function than an inline.
This commit is contained in:
parent
f8ecc7f667
commit
dbe3060e81
@ -104,31 +104,7 @@ void run_poller();
|
|||||||
|
|
||||||
void fd_add_to_fd_list(volatile struct fdlist *list, int fd, int off);
|
void fd_add_to_fd_list(volatile struct fdlist *list, int fd, int off);
|
||||||
void fd_rm_from_fd_list(volatile struct fdlist *list, int fd, int off);
|
void fd_rm_from_fd_list(volatile struct fdlist *list, int fd, int off);
|
||||||
|
void updt_fd_polling(const int fd);
|
||||||
/* Mark fd <fd> as updated for polling and allocate an entry in the update list
|
|
||||||
* for this if it was not already there. This can be done at any time.
|
|
||||||
*/
|
|
||||||
static inline void updt_fd_polling(const int fd)
|
|
||||||
{
|
|
||||||
if ((fdtab[fd].thread_mask & all_threads_mask) == tid_bit) {
|
|
||||||
|
|
||||||
/* note: we don't have a test-and-set yet in hathreads */
|
|
||||||
|
|
||||||
if (HA_ATOMIC_BTS(&fdtab[fd].update_mask, tid))
|
|
||||||
return;
|
|
||||||
|
|
||||||
fd_updt[fd_nbupdt++] = fd;
|
|
||||||
} else {
|
|
||||||
unsigned long update_mask = fdtab[fd].update_mask;
|
|
||||||
do {
|
|
||||||
if (update_mask == fdtab[fd].thread_mask)
|
|
||||||
return;
|
|
||||||
} while (!_HA_ATOMIC_CAS(&fdtab[fd].update_mask, &update_mask,
|
|
||||||
fdtab[fd].thread_mask));
|
|
||||||
fd_add_to_fd_list(&update_list, fd, offsetof(struct fdtab, update));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Called from the poller to acknoledge we read an entry from the global
|
/* Called from the poller to acknoledge we read an entry from the global
|
||||||
* update list, to remove our bit from the update_mask, and remove it from
|
* update list, to remove our bit from the update_mask, and remove it from
|
||||||
|
21
src/fd.c
21
src/fd.c
@ -337,6 +337,27 @@ void fd_remove(int fd)
|
|||||||
fd_dodelete(fd, 0);
|
fd_dodelete(fd, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updt_fd_polling(const int fd)
|
||||||
|
{
|
||||||
|
if ((fdtab[fd].thread_mask & all_threads_mask) == tid_bit) {
|
||||||
|
|
||||||
|
/* note: we don't have a test-and-set yet in hathreads */
|
||||||
|
|
||||||
|
if (HA_ATOMIC_BTS(&fdtab[fd].update_mask, tid))
|
||||||
|
return;
|
||||||
|
|
||||||
|
fd_updt[fd_nbupdt++] = fd;
|
||||||
|
} else {
|
||||||
|
unsigned long update_mask = fdtab[fd].update_mask;
|
||||||
|
do {
|
||||||
|
if (update_mask == fdtab[fd].thread_mask)
|
||||||
|
return;
|
||||||
|
} while (!_HA_ATOMIC_CAS(&fdtab[fd].update_mask, &update_mask,
|
||||||
|
fdtab[fd].thread_mask));
|
||||||
|
fd_add_to_fd_list(&update_list, fd, offsetof(struct fdtab, update));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Tries to send <npfx> parts from <prefix> followed by <nmsg> parts from <msg>
|
/* Tries to send <npfx> parts from <prefix> followed by <nmsg> parts from <msg>
|
||||||
* optionally followed by a newline if <nl> is non-null, to file descriptor
|
* optionally followed by a newline if <nl> is non-null, to file descriptor
|
||||||
* <fd>. The message is sent atomically using writev(). It may be truncated to
|
* <fd>. The message is sent atomically using writev(). It may be truncated to
|
||||||
|
Loading…
x
Reference in New Issue
Block a user