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

Ah, cool. Thanks, Matz!

-Steven

On Sat, May 10, 2008 at 1:36 PM, Yukihiro M. [email protected]

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”
[email protected] 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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs