Commit 228fe97
Jeremy Daer
Source.new_from_memory: keep a ref to the memory area
vips_source_new_from_memory() aliases the caller's buffer rather than
copying it -- vips_blob_new(NULL, data, length), NULL free_fn -- so
libvips reads it for as long as the source is alive. We kept no Ruby
reference to it, so nothing stopped the GC from freeing it first.
Mirrors Image.new_from_memory, which already does this.
Also answers and removes the FIXME: Image.new_from_buffer does not need
a ref. It goes through GValue#set for Vips::BLOB_TYPE, which g_mallocs
its own block, memcpys into it and hands libvips ownership via
vips_value_set_blob(..., GLib::G_FREE, ...).1 parent 88bdc7c commit 228fe97
3 files changed
Lines changed: 28 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
5 | 8 | | |
6 | 9 | | |
7 | 10 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
73 | 76 | | |
74 | 77 | | |
75 | 78 | | |
| |||
79 | 82 | | |
80 | 83 | | |
81 | 84 | | |
82 | | - | |
83 | | - | |
| 85 | + | |
84 | 86 | | |
85 | | - | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
86 | 93 | | |
87 | 94 | | |
88 | 95 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
29 | 44 | | |
30 | 45 | | |
31 | 46 | | |
| |||
0 commit comments