@@ -74,6 +74,37 @@ static size_t zstd_stream_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output,
74
74
#endif
75
75
}
76
76
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
+
77
108
static void set_decompress_params (ZSTD_DCtx * const dctx , VALUE kwargs )
78
109
{
79
110
ID kwargs_keys [1 ];
@@ -92,33 +123,64 @@ static void set_decompress_params(ZSTD_DCtx* const dctx, VALUE kwargs)
92
123
}
93
124
}
94
125
95
- struct decompress_params {
126
+ struct stream_decompress_params {
96
127
ZSTD_DCtx * dctx ;
97
128
ZSTD_outBuffer * output ;
98
129
ZSTD_inBuffer * input ;
99
130
size_t ret ;
100
131
};
101
132
102
- static void * decompress_wrapper (void * args )
133
+ static void * stream_decompress_wrapper (void * args )
103
134
{
104
- struct decompress_params * params = args ;
135
+ struct stream_decompress_params * params = args ;
105
136
params -> ret = ZSTD_decompressStream (params -> dctx , params -> output , params -> input );
106
137
return NULL ;
107
138
}
108
139
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 )
110
141
{
111
142
#ifdef HAVE_RUBY_THREAD_H
112
143
if (gvl ) {
113
144
return ZSTD_decompressStream (dctx , output , input );
114
145
} 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 );
117
148
return params .ret ;
118
149
}
119
150
#else
120
151
return ZSTD_decompressStream (dctx , output , input );
121
152
#endif
122
153
}
123
154
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
+
124
186
#endif /* ZSTD_RUBY_H */
0 commit comments