From b06ffd71bc82ce61fcacf8f5589f9312c4472db8 Mon Sep 17 00:00:00 2001 From: Stephen Sorriaux Date: Mon, 24 Apr 2023 14:35:42 -0400 Subject: [PATCH] fix(core): no need to alway perform an `os.stat(fd)` Performing an `os.stat(fd)` on Windows platform generate a crash because the "handler is not valid". `select` already handle this possible case and there is no actual need to perform any kind of check before. This was removed, and the linked test slightly changed. --- kazoo/handlers/utils.py | 8 +++++--- kazoo/tests/test_selectors_select.py | 8 +------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/kazoo/handlers/utils.py b/kazoo/handlers/utils.py index 2abe1ff8..9db26c40 100644 --- a/kazoo/handlers/utils.py +++ b/kazoo/handlers/utils.py @@ -3,7 +3,6 @@ from collections import defaultdict import errno import functools -import os import select import selectors import ssl @@ -349,7 +348,6 @@ def fileobj_to_fd(fileobj): raise TypeError("Invalid file object: " "{!r}".format(fileobj)) if fd < 0: raise TypeError("Invalid file descriptor: {}".format(fd)) - os.fstat(fd) return fd @@ -380,7 +378,11 @@ def selector_select( selector = selectors_module.DefaultSelector() for fd, events in fd_events.items(): - selector.register(fd, events) + try: + selector.register(fd, events) + except (ValueError, OSError) as e: + # gevent can raise OSError + raise ValueError('Invalid event mask or fd') from e revents, wevents, xevents = [], [], [] try: diff --git a/kazoo/tests/test_selectors_select.py b/kazoo/tests/test_selectors_select.py index 19b224d1..99dd44ae 100644 --- a/kazoo/tests/test_selectors_select.py +++ b/kazoo/tests/test_selectors_select.py @@ -3,7 +3,6 @@ to test the selector_select function. """ -import errno import os import socket import sys @@ -41,12 +40,7 @@ def test_errno(self): with open(__file__, "rb") as fp: fd = fp.fileno() fp.close() - try: - select([fd], [], [], 0) - except OSError as err: - self.assertEqual(err.errno, errno.EBADF) - else: - self.fail("exception not raised") + self.assertRaises(ValueError, select, [fd], [], [], 0) def test_returned_list_identity(self): # See issue #8329