cython: freethreading_compatible by methane · Pull Request #654 · msgpack/msgpack-python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
3 changes: 2 additions & 1 deletion msgpack/_cmsgpack.pyx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# coding: utf-8
#cython: embedsignature=True, c_string_encoding=ascii, language_level=3
#cython: freethreading_compatible = True
import cython
from cpython.datetime cimport import_datetime, datetime_new
import_datetime()

Expand Down
10 changes: 8 additions & 2 deletions msgpack/_packer.pyx
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# coding: utf-8

from cpython cimport *
from cpython.bytearray cimport PyByteArray_Check, PyByteArray_CheckExact
from cpython.datetime cimport (
Expand Down Expand Up @@ -129,6 +127,7 @@ cdef class Packer:
if self.exports > 0:
raise BufferError("Existing exports of data: Packer cannot be changed")

@cython.critical_section
def __init__(self, *, default=None,
bint use_single_float=False, bint autoreset=True, bint use_bin_type=True,
bint strict_types=False, bint datetime=False, unicode_errors=None,
Expand Down Expand Up @@ -269,6 +268,7 @@ cdef class Packer:
return ret
return self._pack_inner(o, 0, nest_limit)

@cython.critical_section
def pack(self, object obj):
cdef int ret
self._check_exports()
Expand All @@ -284,13 +284,15 @@ cdef class Packer:
self.pk.length = 0
return buf

@cython.critical_section
def pack_ext_type(self, typecode, data):
self._check_exports()
if len(data) > ITEM_LIMIT:
raise ValueError("ext data too large")
msgpack_pack_ext(&self.pk, typecode, len(data))
msgpack_pack_raw_body(&self.pk, data, len(data))

@cython.critical_section
def pack_array_header(self, long long size):
self._check_exports()
if size > ITEM_LIMIT:
Expand All @@ -301,6 +303,7 @@ cdef class Packer:
self.pk.length = 0
return buf

@cython.critical_section
def pack_map_header(self, long long size):
self._check_exports()
if size > ITEM_LIMIT:
Expand All @@ -311,6 +314,7 @@ cdef class Packer:
self.pk.length = 0
return buf

@cython.critical_section
def pack_map_pairs(self, object pairs):
"""
Pack *pairs* as msgpack map type.
Expand All @@ -331,6 +335,7 @@ cdef class Packer:
self.pk.length = 0
return buf

@cython.critical_section
def reset(self):
"""Reset internal buffer.

Expand All @@ -339,6 +344,7 @@ cdef class Packer:
self._check_exports()
self.pk.length = 0

@cython.critical_section
def bytes(self):
"""Return internal buffer contents as bytes object"""
return PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
Expand Down
11 changes: 9 additions & 2 deletions msgpack/_unpacker.pyx