[#290] — Florian Frank <flori@...>
Hi all,
5 messages
2002/08/03
[#297] GC longjmp macros — Michal Rokos <m.rokos@...>
Hi,
5 messages
2002/08/05
[#308] Q: OSSL in std. distr? — Michal Rokos <m.rokos@...>
Hi,
4 messages
2002/08/08
[#326] Implications of a #force_free method in Object? — Matthew Bloch <mattbee@...>
Hello;
8 messages
2002/08/19
[#328] Int vs Long — Michal Rokos <m.rokos@...>
Hi,
7 messages
2002/08/21
[#337] Int vs Long (2nd part) — Michal Rokos <m.rokos@...>
Hi,
7 messages
2002/08/22
[#340] Int vs Long #3 — Michal Rokos <m.rokos@...>
Hi,
9 messages
2002/08/22
[#344] Re: [Cleanup] Int vs Long #3
— nobu.nokada@...
2002/08/22
Hi,
[#348] Re: [Cleanup] Int vs Long #3
— Michal Rokos <m.rokos@...>
2002/08/23
Hello,
[#353] File (struct stat handling) — Michal Rokos <m.rokos@...>
Hello,
6 messages
2002/08/23
[#358] node.h for eval.c — Michal Rokos <m.rokos@...>
Hi,
5 messages
2002/08/23
[#372] rb_class_path — Michal Rokos <m.rokos@...>
Hello,
7 messages
2002/08/27
[#382] Port match to new dup, clone framework — Michal Rokos <m.rokos@...>
Hi,
5 messages
2002/08/28
[#393] in dln.c — Michal Rokos <m.rokos@...>
Hi,
14 messages
2002/08/30
[#398] Re: [MemLeak] in dln.c
— nobu.nokada@...
2002/08/31
Hi,
[#403] Re: [MemLeak] in dln.c
— Michal Rokos <m.rokos@...>
2002/09/02
Hello,
Re: [Update] Port match to new dup, clone framework
From:
nobu.nokada@...
Date:
2002-08-28 15:18:49 UTC
List:
ruby-core #385
Hi,
At Wed, 28 Aug 2002 23:42:53 +0900,
Michal Rokos wrote:
> This should fix it. :-) (I said should, but I know that nobu
> will find at least 1 bug in it... :-))
You mean this? ;-)
/(.*)/=~"foo"; $~.become(Regexp.allocate)
will leak memory.
> @@ -528,40 +529,17 @@ match_alloc()
> }
>
> static VALUE
> -match_clone(match)
> - VALUE match;
> +match_become(obj, orig)
> + VALUE obj, orig;
> {
> - NEWOBJ(clone, struct RMatch);
> - CLONESETUP(clone, match);
> -
> - clone->str = RMATCH(match)->str;
> - clone->regs = 0;
> -
> - clone->regs = ALLOC(struct re_registers);
> - clone->regs->allocated = 0;
> - re_copy_registers(clone->regs, RMATCH(match)->regs);
+ if (obj == orig) return obj;
> + RMATCH(obj)->str = RMATCH(orig)->str;
+ re_free_registers(RMATCH(obj)->regs);
> + RMATCH(obj)->regs->allocated = 0;
> + re_copy_registers(RMATCH(obj)->regs, RMATCH(orig)->regs);
Or just leave allocated as is, without setting to 0.
--
Nobu Nakada