zstd-ruby 1.5.6.3 → 1.5.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/zstdruby/common.h +74 -12
- data/ext/zstdruby/streaming_compress.c +3 -3
- data/ext/zstdruby/streaming_decompress.c +1 -1
- data/ext/zstdruby/zstdruby.c +11 -14
- data/lib/zstd-ruby/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63e93f85ee472c512ed26f0e7da7fd352b143fab32dcf5e902772bc1f202c7b0
|
4
|
+
data.tar.gz: 681ea9a091527554620a032b003f578684a743ecba43c66dfb1682b1e15db794
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4245143daaf4a8c905e7c82eec53c60fcf391f55e21fa1f39c9aca76cccefedc6c90a25a9c581255f6fc3ea909501eb83a219c461b1b24b1f2e6552c4281d16e
|
7
|
+
data.tar.gz: 6294213e536fd3117e6f2de7efdb58d9754344bc9d4aff83ec6943e0958dfe4e1cdae9316c6ca2a778e08f6573390fdf026f053677def60aa92abf8e5c98518f
|
data/ext/zstdruby/common.h
CHANGED
@@ -44,7 +44,7 @@ static void set_compress_params(ZSTD_CCtx* const ctx, VALUE level_from_args, VAL
|
|
44
44
|
}
|
45
45
|
}
|
46
46
|
|
47
|
-
struct
|
47
|
+
struct stream_compress_params {
|
48
48
|
ZSTD_CCtx* ctx;
|
49
49
|
ZSTD_outBuffer* output;
|
50
50
|
ZSTD_inBuffer* input;
|
@@ -52,21 +52,21 @@ struct compress_params {
|
|
52
52
|
size_t ret;
|
53
53
|
};
|
54
54
|
|
55
|
-
static void*
|
55
|
+
static void* stream_compress_wrapper(void* args)
|
56
56
|
{
|
57
|
-
struct
|
57
|
+
struct stream_compress_params* params = args;
|
58
58
|
params->ret = ZSTD_compressStream2(params->ctx, params->output, params->input, params->endOp);
|
59
59
|
return NULL;
|
60
60
|
}
|
61
61
|
|
62
|
-
static size_t
|
62
|
+
static size_t zstd_stream_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input, ZSTD_EndDirective endOp, bool gvl)
|
63
63
|
{
|
64
64
|
#ifdef HAVE_RUBY_THREAD_H
|
65
65
|
if (gvl) {
|
66
66
|
return ZSTD_compressStream2(ctx, output, input, endOp);
|
67
67
|
} else {
|
68
|
-
struct
|
69
|
-
rb_thread_call_without_gvl(
|
68
|
+
struct stream_compress_params params = { ctx, output, input, endOp };
|
69
|
+
rb_thread_call_without_gvl(stream_compress_wrapper, ¶ms, NULL, NULL);
|
70
70
|
return params.ret;
|
71
71
|
}
|
72
72
|
#else
|
@@ -74,6 +74,37 @@ static size_t zstd_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output, ZSTD_i
|
|
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, ¶ms, 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,28 +123,28 @@ static void set_decompress_params(ZSTD_DCtx* const dctx, VALUE kwargs)
|
|
92
123
|
}
|
93
124
|
}
|
94
125
|
|
95
|
-
struct
|
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*
|
133
|
+
static void* stream_decompress_wrapper(void* args)
|
103
134
|
{
|
104
|
-
struct
|
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
|
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
|
116
|
-
rb_thread_call_without_gvl(
|
146
|
+
struct stream_decompress_params params = { dctx, output, input };
|
147
|
+
rb_thread_call_without_gvl(stream_decompress_wrapper, ¶ms, NULL, NULL);
|
117
148
|
return params.ret;
|
118
149
|
}
|
119
150
|
#else
|
@@ -121,4 +152,35 @@ static size_t zstd_decompress(ZSTD_DCtx* const dctx, ZSTD_outBuffer* output, ZST
|
|
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, ¶ms, 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 */
|
@@ -106,7 +106,7 @@ no_compress(struct streaming_compress_t* sc, ZSTD_EndDirective endOp)
|
|
106
106
|
do {
|
107
107
|
ZSTD_outBuffer output = { (void*)output_data, sc->buf_size, 0 };
|
108
108
|
|
109
|
-
size_t const ret =
|
109
|
+
size_t const ret = zstd_stream_compress(sc->ctx, &output, &input, endOp, false);
|
110
110
|
if (ZSTD_isError(ret)) {
|
111
111
|
rb_raise(rb_eRuntimeError, "flush error error code: %s", ZSTD_getErrorName(ret));
|
112
112
|
}
|
@@ -130,7 +130,7 @@ rb_streaming_compress_compress(VALUE obj, VALUE src)
|
|
130
130
|
VALUE result = rb_str_new(0, 0);
|
131
131
|
while (input.pos < input.size) {
|
132
132
|
ZSTD_outBuffer output = { (void*)output_data, sc->buf_size, 0 };
|
133
|
-
size_t const ret =
|
133
|
+
size_t const ret = zstd_stream_compress(sc->ctx, &output, &input, ZSTD_e_continue, false);
|
134
134
|
if (ZSTD_isError(ret)) {
|
135
135
|
rb_raise(rb_eRuntimeError, "compress error error code: %s", ZSTD_getErrorName(ret));
|
136
136
|
}
|
@@ -157,7 +157,7 @@ rb_streaming_compress_write(int argc, VALUE *argv, VALUE obj)
|
|
157
157
|
|
158
158
|
while (input.pos < input.size) {
|
159
159
|
ZSTD_outBuffer output = { (void*)output_data, sc->buf_size, 0 };
|
160
|
-
size_t const ret =
|
160
|
+
size_t const ret = zstd_stream_compress(sc->ctx, &output, &input, ZSTD_e_continue, false);
|
161
161
|
if (ZSTD_isError(ret)) {
|
162
162
|
rb_raise(rb_eRuntimeError, "compress error error code: %s", ZSTD_getErrorName(ret));
|
163
163
|
}
|
@@ -104,7 +104,7 @@ rb_streaming_decompress_decompress(VALUE obj, VALUE src)
|
|
104
104
|
VALUE result = rb_str_new(0, 0);
|
105
105
|
while (input.pos < input.size) {
|
106
106
|
ZSTD_outBuffer output = { (void*)output_data, sd->buf_size, 0 };
|
107
|
-
size_t const ret =
|
107
|
+
size_t const ret = zstd_stream_decompress(sd->dctx, &output, &input, false);
|
108
108
|
if (ZSTD_isError(ret)) {
|
109
109
|
rb_raise(rb_eRuntimeError, "decompress error error code: %s", ZSTD_getErrorName(ret));
|
110
110
|
}
|
data/ext/zstdruby/zstdruby.c
CHANGED
@@ -25,22 +25,19 @@ static VALUE rb_compress(int argc, VALUE *argv, VALUE self)
|
|
25
25
|
StringValue(input_value);
|
26
26
|
char* input_data = RSTRING_PTR(input_value);
|
27
27
|
size_t input_size = RSTRING_LEN(input_value);
|
28
|
-
|
29
|
-
// ZSTD_compressBound causes SEGV under multi-thread
|
28
|
+
|
30
29
|
size_t max_compressed_size = ZSTD_compressBound(input_size);
|
31
|
-
VALUE
|
32
|
-
char* output_data = RSTRING_PTR(
|
33
|
-
ZSTD_outBuffer output = { (void*)output_data, max_compressed_size, 0 };
|
30
|
+
VALUE output = rb_str_new(NULL, max_compressed_size);
|
31
|
+
char* output_data = RSTRING_PTR(output);
|
34
32
|
|
35
|
-
size_t const ret = zstd_compress(ctx,
|
33
|
+
size_t const ret = zstd_compress(ctx, output_data, max_compressed_size, input_data, input_size, false);
|
36
34
|
if (ZSTD_isError(ret)) {
|
37
|
-
|
38
|
-
rb_raise(rb_eRuntimeError, "%s: %s", "compress failed", ZSTD_getErrorName(ret));
|
35
|
+
rb_raise(rb_eRuntimeError, "compress error error code: %s", ZSTD_getErrorName(ret));
|
39
36
|
}
|
40
|
-
|
41
|
-
|
37
|
+
rb_str_resize(output, ret);
|
38
|
+
|
42
39
|
ZSTD_freeCCtx(ctx);
|
43
|
-
return
|
40
|
+
return output;
|
44
41
|
}
|
45
42
|
|
46
43
|
static VALUE rb_compress_using_dict(int argc, VALUE *argv, VALUE self)
|
@@ -99,7 +96,7 @@ static VALUE decompress_buffered(ZSTD_DCtx* dctx, const char* input_data, size_t
|
|
99
96
|
rb_str_resize(output_string, output.size);
|
100
97
|
output.dst = RSTRING_PTR(output_string);
|
101
98
|
|
102
|
-
size_t ret =
|
99
|
+
size_t ret = zstd_stream_decompress(dctx, &output, &input, false);
|
103
100
|
if (ZSTD_isError(ret)) {
|
104
101
|
ZSTD_freeDCtx(dctx);
|
105
102
|
rb_raise(rb_eRuntimeError, "%s: %s", "ZSTD_decompressStream failed", ZSTD_getErrorName(ret));
|
@@ -137,11 +134,11 @@ static VALUE rb_decompress(int argc, VALUE *argv, VALUE self)
|
|
137
134
|
VALUE output = rb_str_new(NULL, uncompressed_size);
|
138
135
|
char* output_data = RSTRING_PTR(output);
|
139
136
|
|
140
|
-
size_t const decompress_size =
|
137
|
+
size_t const decompress_size = zstd_decompress(dctx, output_data, uncompressed_size, input_data, input_size, false);
|
141
138
|
if (ZSTD_isError(decompress_size)) {
|
142
139
|
rb_raise(rb_eRuntimeError, "%s: %s", "decompress error", ZSTD_getErrorName(decompress_size));
|
143
140
|
}
|
144
|
-
|
141
|
+
ZSTD_freeDCtx(dctx);
|
145
142
|
return output;
|
146
143
|
}
|
147
144
|
|
data/lib/zstd-ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zstd-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.6.
|
4
|
+
version: 1.5.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SpringMT
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|