Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython-zstd
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
cython-zstd
Commits
d1786bbf
Commit
d1786bbf
authored
Apr 10, 2018
by
Julien Muchembled
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release GIL while (de)compressing
parent
aaa67d43
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
11 deletions
+16
-11
zstd/_bindings.pyx
zstd/_bindings.pyx
+16
-11
No files found.
zstd/_bindings.pyx
View file @
d1786bbf
...
...
@@ -9,7 +9,7 @@ cdef extern from "Python.h":
void
Py_DECREF
(
PyObject
*
o
)
PyObject
*
PyBytes_FromStringAndSize
(
char
*
v
,
Py_ssize_t
len
)
except
NULL
int
_PyBytes_Resize
(
PyObject
**
string
,
Py_ssize_t
newsize
)
except
-
1
char
*
PyBytes_AS_STRING
(
PyObject
*
string
)
char
*
PyBytes_AS_STRING
(
PyObject
*
string
)
nogil
cdef
extern
from
"zstd.h"
:
# To simplify implementation, we use signed types (and detect errors with
...
...
@@ -20,9 +20,9 @@ cdef extern from "zstd.h":
PY_LONG_LONG
ZSTD_getFrameContentSize
(
const
void
*
src
,
ssize_t
srcSize
)
ssize_t
ZSTD_compress
(
void
*
dst
,
ssize_t
dstCapacity
,
const
void
*
src
,
ssize_t
srcSize
,
int
compressionLevel
)
int
compressionLevel
)
nogil
ssize_t
ZSTD_decompress
(
void
*
dst
,
ssize_t
dstCapacity
,
const
void
*
src
,
ssize_t
compressedSize
)
const
void
*
src
,
ssize_t
compressedSize
)
nogil
def
maxCLevel
():
return
ZSTD_maxCLevel
()
...
...
@@ -40,34 +40,39 @@ def getErrorName(code):
# why can't I just cast to str ?
IF
str
is
bytes
:
return
ZSTD_getErrorName
(
code
)
return
ZSTD_getErrorName
(
code
).
decode
()
ELSE
:
return
ZSTD_getErrorName
(
code
).
decode
()
error
=
None
global
error
def
compress
(
bytes
string
not
None
,
int
level
=
0
):
cdef
:
int
x
ssize_t
srcSize
=
len
(
string
)
ssize_t
dstCapacity
=
ZSTD_compressBound
(
srcSize
)
PyObject
*
dst
=
PyBytes_FromStringAndSize
(
NULL
,
dstCapacity
)
int
x
=
ZSTD_compress
(
PyBytes_AS_STRING
(
dst
),
dstCapacity
,
_PyBytes_AS_STRING
(
string
),
srcSize
,
level
)
with
nogil
:
x
=
ZSTD_compress
(
PyBytes_AS_STRING
(
dst
),
dstCapacity
,
PyBytes_AS_STRING
(
<
PyObject
*>
string
),
srcSize
,
level
)
if
x
<
0
:
Py_DECREF
(
dst
)
raise
error
(
-
x
)
_PyBytes_Resize
(
&
dst
,
x
)
r
=
<
object
>
dst
Py_DECREF
(
dst
)
# revert the unwanted incref on the previous line
Py_DECREF
(
<
PyObject
*>
r
)
# revert the unwanted incref on the previous line
return
r
def
decompress
(
bytes
string
not
None
):
cdef
:
int
x
ssize_t
compressedSize
=
len
(
string
)
void
*
src
=
_PyBytes_AS_STRING
(
string
)
PY_LONG_LONG
dstCapacity
=
_getFrameContentSize
(
src
,
compressedSize
)
dst
=
_PyBytes_FromStringAndSize
(
NULL
,
dstCapacity
)
cdef
int
x
=
ZSTD_decompress
(
_PyBytes_AS_STRING
(
dst
),
dstCapacity
,
src
,
compressedSize
)
with
nogil
:
x
=
ZSTD_decompress
(
PyBytes_AS_STRING
(
<
PyObject
*>
dst
),
dstCapacity
,
src
,
compressedSize
)
if
x
<
0
:
raise
error
(
-
x
)
return
dst
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment