# Detaching free function from String in C API

**URL:** <https://www.ruby-forum.com/t/detaching-free-function-from-string-in-c-api/133542>\
**Category:** Ruby\
**Created:** [April 1, 2008, 1:50pm UTC](https://www.ruby-forum.com/t/detaching-free-function-from-string-in-c-api/133542 "2008-04-01T13:50:55Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![absolute-beginner](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a5b964/32.png) [@absolute-beginner](https://www.ruby-forum.com/u/absolute-beginner)\
**Post date:** [April 1, 2008, 1:50pm UTC](https://www.ruby-forum.com/t/detaching-free-function-from-string-in-c-api/133542/1 "2008-04-01T13:50:55Z")

</div>

Hi

In a C extension, you can unset the ‘free’ function that will be called  
when an object is garbage collected with something like:

RDATA(obj)-\>dfree = 0;

This is useful if you know that whatever C library you’re interfacing to  
will take care of free-ing the C structure.

Is the same thing is possible with an in-built ruby String object, to  
set it so that the underlying char\* contents will not be freed when the  
String is GC’d?

thanks  
alex

---

<div class="post-metadata">

**Author:** ![absolute-beginner](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a5b964/32.png) [@absolute-beginner](https://www.ruby-forum.com/u/absolute-beginner)\
**Post date:** [April 1, 2008, 2:04pm UTC](https://www.ruby-forum.com/t/detaching-free-function-from-string-in-c-api/133542/2 "2008-04-01T14:04:02Z")

</div>

Alex F. wrote:

> Is the same thing is possible with an in-built ruby String object, to  
> set it so that the underlying char\* contents will not be freed when the  
> String is GC’d?

Look at mmap (in RAA), when you write

m = Mmap.new(“aa”)

the object in `m’ is in reality a String object and mmap make in  
sort that ruby will never free the char \* content, otherwise it  
will crash.

Guy Decoux

---

<div class="post-metadata">

**Author:** ![absolute-beginner](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a5b964/32.png) [@absolute-beginner](https://www.ruby-forum.com/u/absolute-beginner)\
**Post date:** [April 1, 2008, 4:36pm UTC](https://www.ruby-forum.com/t/detaching-free-function-from-string-in-c-api/133542/3 "2008-04-01T16:36:05Z")

</div>

ts wrote:

> sort that ruby will never free the char \* content, otherwise it  
> will crash.

Perfect, thanks. I will read the source and ponder

alex
