8000 python: Disable gc while deserializing. · urso/msgpack-python@60d3ce3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 60d3ce3

Browse files
committed
python: Disable gc while deserializing.
1 parent 3aaf5f5 commit 60d3ce3

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

msgpack/_msgpack.pyx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ cdef extern from "Python.h":
99

1010
from libc.stdlib cimport *
1111
from libc.string cimport *
12+
import gc
13+
_gc_disable = gc.disable
14+
_gc_enable = gc.enable
1215

1316
cdef extern from "pack.h":
1417
struct msgpack_packer:
@@ -187,7 +190,9 @@ def unpackb(object packed, object object_hook=None, object list_hook=None, bint
187190
if not PyCallable_Check(list_hook):
188191
raise TypeError("list_hook must be a callable.")
189192
ctx.user.list_hook = <PyObject*>list_hook
193+
_gc_disable()
190194
ret = template_execute(&ctx, buf, buf_len, &off)
195+
_gc_enable()
191196
if ret == 1:
192197
return template_data(&ctx)
193198
else:
@@ -326,7 +331,9 @@ cdef class Unpacker(object):
326331
"""unpack one object"""
327332
cdef int ret
328333
while 1:
334+
_gc_disable()
329335
ret = template_execute(&self.ctx, self.buf, self.buf_tail, &self.buf_head)
336+
_gc_enable()
330337
if ret == 1:
331338
o = template_data(&self.ctx)
332339
template_init(&self.ctx)

0 commit comments

Comments
 (0)
0