Skip to content

Commit 16a70a0

Browse files
ulopekarlb
authored andcommittedJan 15, 2021
Remove pylint rule to enforce sets as first argument to gevent.joinall()
In old versions of gevent passing the same greenlet multiple times to `joinall()` caused a deadlock. Therefore we implemented a custom pylint checker to only allow sets as the first argument. This bug is no longer present and therefore the checker has been removed. Fixes: raiden-network#6683
1 parent ab76088 commit 16a70a0

File tree

2 files changed

+3
-40
lines changed

2 files changed

+3
-40
lines changed
 

‎pylintrc

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ enable=
3333
del-method-used,
3434
exception-in-del,
3535
expression-not-assigned,
36-
gevent-joinall,
3736
gevent-joinall-raise-error,
3837
gevent-disable-wait,
3938
gevent-group-join,

‎tools/pylint/gevent_checker.py

+3-39
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@
33
from pylint.checkers import BaseChecker
44
from pylint.interfaces import IAstroidChecker
55

6-
JOINALL_ID = "gevent-joinall"
7-
JOINALL_MSG = (
8-
"First argument of joinall must have type set to avoid deadlocks. NOTE: set "
9-
"comprehensions are false positives, use `set(<generator>)` instead."
10-
)
116
JOINALL_RAISE_ERROR_ID = "gevent-joinall-raise-error"
127
JOINALL_RAISE_ERROR_MSG = (
138
"`joinall` should always re-raise exceptions from the underlying greenlets, "
@@ -140,7 +135,6 @@ class GeventChecker(BaseChecker):
140135
name = "gevent"
141136
priority = -1
142137
msgs = {
143-
"E6491": (JOINALL_MSG, JOINALL_ID, "Waiting with joinall on a non set is an error."),
144138
"E6493": (
145139
GROUP_JOIN_MSG,
146140
GROUP_JOIN_ID,
@@ -173,12 +167,7 @@ def visit_call(self, node):
173167
name e.g. `f()` or a path e.g. `v.f()`.
174168
"""
175169
try:
176-
self._force_joinall_to_use_set(node)
177-
except InferenceError:
178-
pass
179-
180-
try:
181-
self._force_joinall_to_set_raise_error(node)
170+
self._force_joinall_to_raise_error(node)
182171
except InferenceError:
183172
pass
184173

@@ -202,32 +191,7 @@ def visit_call(self, node):
202191
except InferenceError:
203192
pass
204193

205-
def _force_joinall_to_use_set(self, node):
206-
"""This detect usages of the form:
207-
208-
>>> from gevent import joinall
209-
>>> joinall(...)
210-
211-
or:
212-
213-
>>> import gevent
214-
>>> gevent.joinall(...)
215-
"""
216-
for inferred_func in node.func.infer():
217-
if is_gevent_joinall(inferred_func):
218-
219-
try:
220-
is_every_value_a_set = all(
221-
inferred_first_arg.pytype() == "builtins.set"
222-
for inferred_first_arg in node.args[0].infer()
223-
)
224-
except InferenceError:
225-
is_every_value_a_set = False
226-
227-
if not is_every_value_a_set:
228-
self.add_message(JOINALL_ID, node=node)
229-
230-
def _force_joinall_to_set_raise_error(self, node):
194+
def _force_joinall_to_raise_error(self, node):
231195
"""This detect usages of the form:
232196
233197
>>> from gevent import joinall
@@ -290,7 +254,7 @@ def _force_group_join_to_set_raise_error(self, node):
290254
)
291255

292256
if not is_raise_error_true:
293-
self.add_message(JOINALL_ID, node=node)
257+
self.add_message(JOINALL_RAISE_ERROR_ID, node=node)
294258

295259
def _forbid_calls_to_input(self, node):
296260
"""This detect usages of the form:

0 commit comments

Comments
 (0)
Please sign in to comment.