Do strings from rb_str_new and friends need to be free'd?

Hi,

I have some C native code that calls a logging class written in Ruby. To
pass the message string to the Ruby class, I am creating a string with
rb_str_new2 and then passing its VALUE to rb_funcall. I am wondering if I
need to do any clean-up for the string, or will Ruby handle this for me?

Also, if anyone can suggest an awesome doc on writing Ruby native
extensions, that would be appreciated. At the moment, I am mostly using the
Pickaxe online book.

Here is the code in question:

    void log_warning(const char *fmt, ...)
    {
        char message[BUFFER_LEN]; // Temporary buffer to hold the generated
message

        // Evaluate the format string and store it in the temporary buffer
        va_list ap;
        va_start(ap, fmt);
            vsnprintf(message, BUFFER_LEN, fmt, ap);
        va_end(ap);

        // Find the ID's to call tho Log.warning Ruby class method
        rb_require("log");
        ID log_class = rb_path2class("Log");
        ID log_warning_method = rb_intern("warning");

        // Create a Ruby string containing a copy of the formatted message
        VALUE message_value = rb_str_new2(message);

        // Call Log.warning, with the formatted message as an argument
        rb_funcall(log_class, log_warning_method, 1, message_value);

        // Do I need to do anything here to tell Ruby to clean up the
string?
    }

Thanks!

-Steven

Hi,

···

In message "Re: Do strings from rb_str_new and friends need to be free'd?" on Sat, 10 May 2008 12:21:57 +0900, "Steven Kah Hien Wong" <steven@zensaki.com> writes:

I have some C native code that calls a logging class written in Ruby. To
pass the message string to the Ruby class, I am creating a string with
rb_str_new2 and then passing its VALUE to rb_funcall. I am wondering if I
need to do any clean-up for the string, or will Ruby handle this for me?

The latter. You don't have to (and you shouldn't) free string
objects.

              matz.

Ah, cool. Thanks, Matz!

-Steven

···

On Sat, May 10, 2008 at 1:36 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

Hi,

In message "Re: Do strings from rb_str_new and friends need to be free'd?" > on Sat, 10 May 2008 12:21:57 +0900, "Steven Kah Hien Wong" < > steven@zensaki.com> writes:

>I have some C native code that calls a logging class written in Ruby. To
>pass the message string to the Ruby class, I am creating a string with
>rb_str_new2 and then passing its VALUE to rb_funcall. I am wondering if I
>need to do any clean-up for the string, or will Ruby handle this for me?

The latter. You don't have to (and you shouldn't) free string
objects.

                                                       matz.