Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd142aa8

Browse files
committed
Updates based on Sam's review
- Assert locks are held in `_get_(C/D)Dict`- Update self->d_dict outside `Py_BEGIN_ALLOW_THREADS`- removed critical section AC I missed
1 parentd8d48c2 commitd142aa8

File tree

3 files changed

+14
-20
lines changed

3 files changed

+14
-20
lines changed

‎Modules/_zstd/clinic/decompressor.c.h

Lines changed: 2 additions & 9 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎Modules/_zstd/compressor.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ capsule_free_cdict(PyObject *capsule)
153153
ZSTD_CDict*
154154
_get_CDict(ZstdDict*self,intcompressionLevel)
155155
{
156+
assert(PyMutex_IsLocked(&self->lock));
156157
PyObject*level=NULL;
157158
PyObject*capsule;
158159
ZSTD_CDict*cdict;
@@ -197,11 +198,14 @@ _get_CDict(ZstdDict *self, int compressionLevel)
197198
}
198199

199200
/* Add PyCapsule object to self->c_dicts if not already inserted */
200-
if (PyDict_SetItem(self->c_dicts,level,capsule)<0) {
201-
Py_DECREF(capsule);
201+
PyObject*capsule_dict;
202+
intret=PyDict_SetDefaultRef(self->c_dicts,level,capsule,
203+
&capsule_dict);
204+
Py_XDECREF(capsule_dict);
205+
Py_DECREF(capsule);
206+
if (ret<0) {
202207
gotoerror;
203208
}
204-
Py_DECREF(capsule);
205209
}
206210
else {
207211
/* ZSTD_CDict instance already exists */

‎Modules/_zstd/decompressor.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ typedef struct {
5858
staticinlineZSTD_DDict*
5959
_get_DDict(ZstdDict*self)
6060
{
61+
assert(PyMutex_IsLocked(&self->lock));
6162
ZSTD_DDict*ret;
6263

6364
/* Already created */
@@ -70,9 +71,9 @@ _get_DDict(ZstdDict *self)
7071
char*dict_buffer=PyBytes_AS_STRING(self->dict_content);
7172
Py_ssize_tdict_len=Py_SIZE(self->dict_content);
7273
Py_BEGIN_ALLOW_THREADS
73-
self->d_dict=ZSTD_createDDict(dict_buffer,
74-
dict_len);
74+
ret=ZSTD_createDDict(dict_buffer,dict_len);
7575
Py_END_ALLOW_THREADS
76+
self->d_dict=ret;
7677

7778
if (self->d_dict==NULL) {
7879
_zstd_state*constmod_state=PyType_GetModuleState(Py_TYPE(self));
@@ -84,10 +85,7 @@ _get_DDict(ZstdDict *self)
8485
}
8586
}
8687

87-
/* Don't lose any exception */
88-
ret=self->d_dict;
89-
90-
returnret;
88+
returnself->d_dict;
9189
}
9290

9391
/* Set decompression parameters to decompression context */
@@ -629,7 +627,6 @@ ZstdDecompressor_dealloc(PyObject *ob)
629627
}
630628

631629
/*[clinic input]
632-
@critical_section
633630
@getter
634631
_zstd.ZstdDecompressor.unused_data
635632
@@ -641,7 +638,7 @@ decompressed, unused input data after the frame. Otherwise this will be b''.
641638

642639
staticPyObject*
643640
_zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor*self)
644-
/*[clinic end generated code: output=f3a20940f11b6b09 input=5233800bef00df04]*/
641+
/*[clinic end generated code: output=f3a20940f11b6b09 input=54d41ecd681a3444]*/
645642
{
646643
PyObject*ret;
647644

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp