tcltklib.c: allocate structs with wrapper
* ext/tk/tcltklib.c (ip_create_slave_core): allocate structs with making new wrapper objects and get rid of potential memory leak. * ext/tk/tkutil/tkutil.c (allocate_cbsubst_info): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d50260117f
commit
fbc67dbf2c
@ -6374,10 +6374,11 @@ ip_create_slave_core(interp, argc, argv)
|
|||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
{
|
{
|
||||||
struct tcltkip *master = get_ip(interp);
|
struct tcltkip *master = get_ip(interp);
|
||||||
struct tcltkip *slave = ALLOC(struct tcltkip);
|
struct tcltkip *slave;
|
||||||
/* struct tcltkip *slave = RbTk_ALLOC_N(struct tcltkip, 1); */
|
/* struct tcltkip *slave = RbTk_ALLOC_N(struct tcltkip, 1); */
|
||||||
VALUE safemode;
|
VALUE safemode;
|
||||||
VALUE name;
|
VALUE name;
|
||||||
|
VALUE new_ip;
|
||||||
int safe;
|
int safe;
|
||||||
int thr_crit_bup;
|
int thr_crit_bup;
|
||||||
Tk_Window mainWin;
|
Tk_Window mainWin;
|
||||||
@ -6416,6 +6417,8 @@ ip_create_slave_core(interp, argc, argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
new_ip = TypedData_Make_Struct(CLASS_OF(interp), struct tcltkip,
|
||||||
|
&tcltkip_type, slave);
|
||||||
/* create slave-ip */
|
/* create slave-ip */
|
||||||
#ifdef RUBY_USE_NATIVE_THREAD
|
#ifdef RUBY_USE_NATIVE_THREAD
|
||||||
/* slave->tk_thread_id = 0; */
|
/* slave->tk_thread_id = 0; */
|
||||||
@ -6475,7 +6478,7 @@ ip_create_slave_core(interp, argc, argv)
|
|||||||
|
|
||||||
rb_thread_critical = thr_crit_bup;
|
rb_thread_critical = thr_crit_bup;
|
||||||
|
|
||||||
return TypedData_Wrap_Struct(CLASS_OF(interp), &tcltkip_type, slave);
|
return new_ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -1199,7 +1199,8 @@ allocate_cbsubst_info(struct cbsubst_info **inf_ptr)
|
|||||||
volatile VALUE proc, aliases;
|
volatile VALUE proc, aliases;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
inf = ALLOC(struct cbsubst_info);
|
VALUE info = TypedData_Make_Struct(cSUBST_INFO, struct cbsubst_info,
|
||||||
|
&cbsubst_info_type, inf);
|
||||||
|
|
||||||
inf->full_subst_length = 0;
|
inf->full_subst_length = 0;
|
||||||
|
|
||||||
@ -1218,7 +1219,7 @@ allocate_cbsubst_info(struct cbsubst_info **inf_ptr)
|
|||||||
|
|
||||||
if (inf_ptr != (struct cbsubst_info **)NULL) *inf_ptr = inf;
|
if (inf_ptr != (struct cbsubst_info **)NULL) *inf_ptr = inf;
|
||||||
|
|
||||||
return TypedData_Wrap_Struct(cSUBST_INFO, &cbsubst_info_type, inf);
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1246,7 +1247,7 @@ cbsubst_initialize(argc, argv, self)
|
|||||||
|
|
||||||
inf = cbsubst_get_ptr(rb_obj_class(self));
|
inf = cbsubst_get_ptr(rb_obj_class(self));
|
||||||
|
|
||||||
idx = 0;
|
idx = 0;
|
||||||
for(iv_idx = 0; iv_idx < CBSUBST_TBL_MAX; iv_idx++) {
|
for(iv_idx = 0; iv_idx < CBSUBST_TBL_MAX; iv_idx++) {
|
||||||
if ( inf->ivar[iv_idx] == (ID) 0 ) continue;
|
if ( inf->ivar[iv_idx] == (ID) 0 ) continue;
|
||||||
rb_ivar_set(self, inf->ivar[iv_idx], argv[idx++]);
|
rb_ivar_set(self, inf->ivar[iv_idx], argv[idx++]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user