mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-01 01:32:04 +00:00
BUG/MAJOR: poller: drop FD's tgid when masks don't match
A bug was introduced in 2.7-dev2 by commit 1f947cb39 ("MAJOR: poller: only touch/inspect the update_mask under tgid protection"): once the FD's tgid is held, we would forget to drop it in case the update mask doesn't match, resulting in random watchdog panics of older processes on successive reloads. This should fix issue #1798. Thanks to Christian for the report and to Christopher for the reproducer. No backport is needed.
This commit is contained in:
parent
53bfac8c63
commit
6983426354
@ -204,8 +204,10 @@ static void _do_poll(struct poller *p, int exp, int wake)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(fdtab[fd].update_mask & ti->ltid_bit))
|
||||
if (!(fdtab[fd].update_mask & ti->ltid_bit)) {
|
||||
fd_drop_tgid(fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
done_update_polling(fd);
|
||||
|
||||
|
@ -160,8 +160,10 @@ static void _do_poll(struct poller *p, int exp, int wake)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(fdtab[fd].update_mask & ti->ltid_bit))
|
||||
if (!(fdtab[fd].update_mask & ti->ltid_bit)) {
|
||||
fd_drop_tgid(fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
done_update_polling(fd);
|
||||
|
||||
|
@ -134,8 +134,10 @@ static void _do_poll(struct poller *p, int exp, int wake)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(fdtab[fd].update_mask & ti->ltid_bit))
|
||||
if (!(fdtab[fd].update_mask & ti->ltid_bit)) {
|
||||
fd_drop_tgid(fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
done_update_polling(fd);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user