Skip to content

Commit 3bb9262

Browse files
committed
fix: add gvl flag
1 parent e754f09 commit 3bb9262

File tree

4 files changed

+22
-14
lines changed

4 files changed

+22
-14
lines changed

ext/zstdruby/common.h

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,16 @@ static void* compress_wrapper(void* args)
5858
return NULL;
5959
}
6060

61-
static size_t zstd_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input, ZSTD_EndDirective endOp)
61+
static size_t zstd_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input, ZSTD_EndDirective endOp, bool gvl)
6262
{
6363
#ifdef HAVE_RUBY_THREAD_H
64-
struct compress_params params = { ctx, output, input, endOp };
65-
rb_thread_call_without_gvl(compress_wrapper, &params, NULL, NULL);
66-
return params.ret;
64+
if (gvl) {
65+
return ZSTD_compressStream2(ctx, output, input, endOp);
66+
} else {
67+
struct compress_params params = { ctx, output, input, endOp };
68+
rb_thread_call_without_gvl(compress_wrapper, &params, NULL, NULL);
69+
return params.ret;
70+
}
6771
#else
6872
return ZSTD_compressStream2(ctx, output, input, endOp);
6973
#endif
@@ -101,12 +105,16 @@ static void* decompress_wrapper(void* args)
101105
return NULL;
102106
}
103107

104-
static size_t zstd_decompress(ZSTD_DCtx* const dctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input)
108+
static size_t zstd_decompress(ZSTD_DCtx* const dctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input, bool gvl)
105109
{
106110
#ifdef HAVE_RUBY_THREAD_H
107-
struct decompress_params params = { dctx, output, input };
108-
rb_thread_call_without_gvl(decompress_wrapper, &params, NULL, NULL);
109-
return params.ret;
111+
if (gvl) {
112+
return ZSTD_decompressStream(dctx, output, input);
113+
} else {
114+
struct decompress_params params = { dctx, output, input };
115+
rb_thread_call_without_gvl(decompress_wrapper, &params, NULL, NULL);
116+
return params.ret;
117+
}
110118
#else
111119
return ZSTD_decompressStream(dctx, output, input);
112120
#endif

ext/zstdruby/streaming_compress.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ no_compress(struct streaming_compress_t* sc, ZSTD_EndDirective endOp)
106106
do {
107107
ZSTD_outBuffer output = { (void*)output_data, sc->buf_size, 0 };
108108

109-
size_t const ret = zstd_compress(sc->ctx, &output, &input, endOp);
109+
size_t const ret = zstd_compress(sc->ctx, &output, &input, endOp, false);
110110
if (ZSTD_isError(ret)) {
111111
rb_raise(rb_eRuntimeError, "flush error error code: %s", ZSTD_getErrorName(ret));
112112
}
@@ -130,7 +130,7 @@ rb_streaming_compress_compress(VALUE obj, VALUE src)
130130
VALUE result = rb_str_new(0, 0);
131131
while (input.pos < input.size) {
132132
ZSTD_outBuffer output = { (void*)output_data, sc->buf_size, 0 };
133-
size_t const ret = zstd_compress(sc->ctx, &output, &input, ZSTD_e_continue);
133+
size_t const ret = zstd_compress(sc->ctx, &output, &input, ZSTD_e_continue, false);
134134
if (ZSTD_isError(ret)) {
135135
rb_raise(rb_eRuntimeError, "compress error error code: %s", ZSTD_getErrorName(ret));
136136
}
@@ -157,7 +157,7 @@ rb_streaming_compress_write(int argc, VALUE *argv, VALUE obj)
157157

158158
while (input.pos < input.size) {
159159
ZSTD_outBuffer output = { (void*)output_data, sc->buf_size, 0 };
160-
size_t const ret = zstd_compress(sc->ctx, &output, &input, ZSTD_e_continue);
160+
size_t const ret = zstd_compress(sc->ctx, &output, &input, ZSTD_e_continue, false);
161161
if (ZSTD_isError(ret)) {
162162
rb_raise(rb_eRuntimeError, "compress error error code: %s", ZSTD_getErrorName(ret));
163163
}

ext/zstdruby/streaming_decompress.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ rb_streaming_decompress_decompress(VALUE obj, VALUE src)
104104
VALUE result = rb_str_new(0, 0);
105105
while (input.pos < input.size) {
106106
ZSTD_outBuffer output = { (void*)output_data, sd->buf_size, 0 };
107-
size_t const ret = zstd_decompress(sd->dctx, &output, &input);
107+
size_t const ret = zstd_decompress(sd->dctx, &output, &input, false);
108108
if (ZSTD_isError(ret)) {
109109
rb_raise(rb_eRuntimeError, "decompress error error code: %s", ZSTD_getErrorName(ret));
110110
}

ext/zstdruby/zstdruby.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static VALUE rb_compress(int argc, VALUE *argv, VALUE self)
3232
char* output_data = RSTRING_PTR(buf);
3333
ZSTD_outBuffer output = { (void*)output_data, max_compressed_size, 0 };
3434

35-
size_t const ret = zstd_compress(ctx, &output, &input, ZSTD_e_end);
35+
size_t const ret = zstd_compress(ctx, &output, &input, ZSTD_e_end, true);
3636
if (ZSTD_isError(ret)) {
3737
ZSTD_freeCCtx(ctx);
3838
rb_raise(rb_eRuntimeError, "%s: %s", "compress failed", ZSTD_getErrorName(ret));
@@ -99,7 +99,7 @@ static VALUE decompress_buffered(ZSTD_DCtx* dctx, const char* input_data, size_t
9999
rb_str_resize(output_string, output.size);
100100
output.dst = RSTRING_PTR(output_string);
101101

102-
size_t ret = zstd_decompress(dctx, &output, &input);
102+
size_t ret = zstd_decompress(dctx, &output, &input, true);
103103
if (ZSTD_isError(ret)) {
104104
ZSTD_freeDCtx(dctx);
105105
rb_raise(rb_eRuntimeError, "%s: %s", "ZSTD_decompressStream failed", ZSTD_getErrorName(ret));

0 commit comments

Comments
 (0)