Skip to content

Commit

Permalink
asyncio: Fix memory leak caused by hiredis (redis#2693)
Browse files Browse the repository at this point in the history
  • Loading branch information
oranav committed Apr 4, 2023
1 parent e1017fd commit 0cd5168
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
* asyncio: Fix memory leak caused by hiredis (#2693)
* Allow data to drain from async PythonParser when reading during a disconnect()
* Use asyncio.timeout() instead of async_timeout.timeout() for python >= 3.11 (#2602)
* Add test and fix async HiredisParser when reading during a disconnect() (#2349)
Expand Down
7 changes: 4 additions & 3 deletions redis/asyncio/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,12 +187,13 @@ def __del__(self):
except Exception:
pass

def parse_error(self, response: str) -> ResponseError:
@classmethod
def parse_error(cls, response: str) -> ResponseError:
"""Parse an error response"""
error_code = response.split(" ")[0]
if error_code in self.EXCEPTION_CLASSES:
if error_code in cls.EXCEPTION_CLASSES:
response = response[len(error_code) + 1 :]
exception_class = self.EXCEPTION_CLASSES[error_code]
exception_class = cls.EXCEPTION_CLASSES[error_code]
if isinstance(exception_class, dict):
exception_class = exception_class.get(response, ResponseError)
return exception_class(response)
Expand Down
7 changes: 4 additions & 3 deletions redis/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,13 @@ class BaseParser:
"NOPERM": NoPermissionError,
}

def parse_error(self, response):
@classmethod
def parse_error(cls, response):
"Parse an error response"
error_code = response.split(" ")[0]
if error_code in self.EXCEPTION_CLASSES:
if error_code in cls.EXCEPTION_CLASSES:
response = response[len(error_code) + 1 :]
exception_class = self.EXCEPTION_CLASSES[error_code]
exception_class = cls.EXCEPTION_CLASSES[error_code]
if isinstance(exception_class, dict):
exception_class = exception_class.get(response, ResponseError)
return exception_class(response)
Expand Down

0 comments on commit 0cd5168

Please sign in to comment.