@@ -74,6 +74,37 @@ static size_t zstd_stream_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output,
7474#endif
7575}
7676
77+ struct compress_params {
78+ ZSTD_CCtx * ctx ;
79+ char * output_data ;
80+ size_t output_size ;
81+ char * input_data ;
82+ size_t input_size ;
83+ size_t ret ;
84+ };
85+
86+ static void * compress_wrapper (void * args )
87+ {
88+ struct compress_params * params = args ;
89+ params -> ret = ZSTD_compress2 (params -> ctx ,params -> output_data , params -> output_size , params -> input_data , params -> input_size );
90+ return NULL ;
91+ }
92+
93+ static size_t zstd_compress (ZSTD_CCtx * const ctx , char * output_data , size_t output_size , char * input_data , size_t input_size , bool gvl )
94+ {
95+ #ifdef HAVE_RUBY_THREAD_H
96+ if (gvl ) {
97+ return ZSTD_compress2 (ctx , output_data , output_size , input_data , input_size );
98+ } else {
99+ struct compress_params params = { ctx , output_data , output_size , input_data , input_size };
100+ rb_thread_call_without_gvl (compress_wrapper , & params , NULL , NULL );
101+ return params .ret ;
102+ }
103+ #else
104+ return ZSTD_compress2 (ctx , output_data , output_size , input_data , input_size );
105+ #endif
106+ }
107+
77108static void set_decompress_params (ZSTD_DCtx * const dctx , VALUE kwargs )
78109{
79110 ID kwargs_keys [1 ];
@@ -92,33 +123,64 @@ static void set_decompress_params(ZSTD_DCtx* const dctx, VALUE kwargs)
92123 }
93124}
94125
95- struct decompress_params {
126+ struct stream_decompress_params {
96127 ZSTD_DCtx * dctx ;
97128 ZSTD_outBuffer * output ;
98129 ZSTD_inBuffer * input ;
99130 size_t ret ;
100131};
101132
102- static void * decompress_wrapper (void * args )
133+ static void * stream_decompress_wrapper (void * args )
103134{
104- struct decompress_params * params = args ;
135+ struct stream_decompress_params * params = args ;
105136 params -> ret = ZSTD_decompressStream (params -> dctx , params -> output , params -> input );
106137 return NULL ;
107138}
108139
109- static size_t zstd_decompress (ZSTD_DCtx * const dctx , ZSTD_outBuffer * output , ZSTD_inBuffer * input , bool gvl )
140+ static size_t zstd_stream_decompress (ZSTD_DCtx * const dctx , ZSTD_outBuffer * output , ZSTD_inBuffer * input , bool gvl )
110141{
111142#ifdef HAVE_RUBY_THREAD_H
112143 if (gvl ) {
113144 return ZSTD_decompressStream (dctx , output , input );
114145 } else {
115- struct decompress_params params = { dctx , output , input };
116- rb_thread_call_without_gvl (decompress_wrapper , & params , NULL , NULL );
146+ struct stream_decompress_params params = { dctx , output , input };
147+ rb_thread_call_without_gvl (stream_decompress_wrapper , & params , NULL , NULL );
117148 return params .ret ;
118149 }
119150#else
120151 return ZSTD_decompressStream (dctx , output , input );
121152#endif
122153}
123154
155+ struct decompress_params {
156+ ZSTD_DCtx * dctx ;
157+ char * output_data ;
158+ size_t output_size ;
159+ char * input_data ;
160+ size_t input_size ;
161+ size_t ret ;
162+ };
163+
164+ static void * decompress_wrapper (void * args )
165+ {
166+ struct decompress_params * params = args ;
167+ params -> ret = ZSTD_decompressDCtx (params -> dctx , params -> output_data , params -> output_size , params -> input_data , params -> input_size );
168+ return NULL ;
169+ }
170+
171+ static size_t zstd_decompress (ZSTD_DCtx * const dctx , char * output_data , size_t output_size , char * input_data , size_t input_size , bool gvl )
172+ {
173+ #ifdef HAVE_RUBY_THREAD_H
174+ if (gvl ) {
175+ return ZSTD_decompressDCtx (dctx , output_data , output_size , input_data , input_size );
176+ } else {
177+ struct decompress_params params = { dctx , output_data , output_size , input_data , input_size };
178+ rb_thread_call_without_gvl (decompress_wrapper , & params , NULL , NULL );
179+ return params .ret ;
180+ }
181+ #else
182+ return ZSTD_decompressDCtx (dctx , output_data , output_size , input_data , input_size );
183+ #endif
184+ }
185+
124186#endif /* ZSTD_RUBY_H */
0 commit comments