Skip to content

Commit d97830e

Browse files
authored
Merge pull request #320 from Shopify/never-copy-ruby-strings-in-rmem
2 parents d8e2401 + 67bf536 commit d97830e

3 files changed

Lines changed: 3 additions & 24 deletions

File tree

ext/msgpack/buffer.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,14 +326,12 @@ static inline void _msgpack_buffer_append_reference(msgpack_buffer_t* b, VALUE s
326326

327327
void _msgpack_buffer_append_long_string(msgpack_buffer_t* b, VALUE string)
328328
{
329-
size_t length = RSTRING_LEN(string);
330-
331329
if(b->io != Qnil) {
332330
msgpack_buffer_flush(b);
333331
if (ENCODING_GET(string) == msgpack_rb_encindex_ascii8bit) {
334332
rb_funcall(b->io, b->io_write_all_method, 1, string);
335333
} else {
336-
msgpack_buffer_append(b, RSTRING_PTR(string), length);
334+
msgpack_buffer_append(b, RSTRING_PTR(string), RSTRING_LEN(string));
337335
}
338336
} else {
339337
_msgpack_buffer_append_reference(b, string);

ext/msgpack/buffer.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -268,14 +268,7 @@ static inline size_t msgpack_buffer_append_string(msgpack_buffer_t* b, VALUE str
268268
static inline size_t msgpack_buffer_append_string_reference(msgpack_buffer_t* b, VALUE string)
269269
{
270270
size_t length = RSTRING_LEN(string);
271-
272-
if(length > MSGPACK_BUFFER_STRING_WRITE_REFERENCE_MINIMUM) {
273-
_msgpack_buffer_append_long_string(b, string);
274-
275-
} else {
276-
msgpack_buffer_append(b, RSTRING_PTR(string), length);
277-
}
278-
271+
_msgpack_buffer_append_long_string(b, string);
279272
return length;
280273
}
281274

ext/msgpack/unpacker_class.c

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -249,18 +249,6 @@ static VALUE Unpacker_read_map_header(VALUE self)
249249
return ULONG2NUM(size); // long at least 32 bits
250250
}
251251

252-
253-
static VALUE Unpacker_feed(VALUE self, VALUE data)
254-
{
255-
msgpack_unpacker_t *uk = MessagePack_Unpacker_get(self);
256-
257-
StringValue(data);
258-
259-
msgpack_buffer_append_string(UNPACKER_BUFFER_(uk), data);
260-
261-
return self;
262-
}
263-
264252
static VALUE Unpacker_feed_reference(VALUE self, VALUE data)
265253
{
266254
msgpack_unpacker_t *uk = MessagePack_Unpacker_get(self);
@@ -457,7 +445,7 @@ void MessagePack_Unpacker_module_init(VALUE mMessagePack)
457445
rb_define_method(cMessagePack_Unpacker, "skip_nil", Unpacker_skip_nil, 0);
458446
rb_define_method(cMessagePack_Unpacker, "read_array_header", Unpacker_read_array_header, 0);
459447
rb_define_method(cMessagePack_Unpacker, "read_map_header", Unpacker_read_map_header, 0);
460-
rb_define_method(cMessagePack_Unpacker, "feed", Unpacker_feed, 1);
448+
rb_define_method(cMessagePack_Unpacker, "feed", Unpacker_feed_reference, 1);
461449
rb_define_method(cMessagePack_Unpacker, "feed_reference", Unpacker_feed_reference, 1);
462450
rb_define_method(cMessagePack_Unpacker, "each", Unpacker_each, 0);
463451
rb_define_method(cMessagePack_Unpacker, "feed_each", Unpacker_feed_each, 1);

0 commit comments

Comments
 (0)