aboutsummaryrefslogtreecommitdiffstats
path: root/file.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-16 12:56:29 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-16 12:56:29 +0000
commite73a5053fc179ee6ce774f5bab973b39dc3e3c45 (patch)
tree382100cd92c8fe645edae9c8e0fba362230a737a /file.c
parent193f5873094631dae283a8386dc98d8d9afda599 (diff)
downloadruby-e73a5053fc179ee6ce774f5bab973b39dc3e3c45.tar.gz
wrapper object before alloc
* error.c (rb_name_err_mesg_new): new wrapper object before allocate data area and get rid of potential memory leak. GC guards are no longer needed. * file.c (stat_new_0): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/file.c b/file.c
index c724a4b97c..ac99de6043 100644
--- a/file.c
+++ b/file.c
@@ -406,12 +406,14 @@ static VALUE
stat_new_0(VALUE klass, const struct stat *st)
{
struct stat *nst = 0;
+ VALUE obj = TypedData_Wrap_Struct(klass, &stat_data_type, 0);
if (st) {
nst = ALLOC(struct stat);
*nst = *st;
+ RTYPEDDATA_DATA(obj) = nst;
}
- return TypedData_Wrap_Struct(klass, &stat_data_type, nst);
+ return obj;
}
VALUE