Commit graph

246 commits

Author SHA1 Message Date
shyouhei
fe8e105823 merge revision(s) 18394,18397:
* gc.c (chain_finalized_object): deletes finalizers to be invoked from
	  finalizer_table.
	* gc.c (rb_gc_call_finalizer_at_exit): warns when could not invoke
	  finalizers.
	* gc.c (run_final): runs finalizers with the object terminated.
	* gc.c (rb_gc_call_finalizer_at_exit): ObjectSpace::finalizers needs
	  to scan whole object space, although deprecated.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@26170 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-24 08:28:08 +00:00
shyouhei
50c667a837 merge revision(s) 24713:
* gc.c (gc_sweep): makes new room if object space is full of
	  finalized objects and has no free objects.  [ruby-dev:39201]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@25801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-11-16 11:00:15 +00:00
shyouhei
68201165ed * gc.c (rb_gc_call_finalizer_at_exit): finalizer_table can be NULL.
[ruby-core:24395]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@24178 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-17 15:48:05 +00:00
shyouhei
7adb8681f0 merge revision(s) 23257:
* eval.c (proc_invoke): shares dmethod scope local variables.
	  a patch from coderrr at [ruby-core:23050]
	* gc.c (obj_free): do not free cloned scope local variables.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@23997 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-07-09 09:05:18 +00:00
shyouhei
f46c260521 merge revision(s) 22882,22961,22971:
* gc.c (run_final): calls free function.  [ruby-core:22578]
	* gc.c (rb_gc_call_finalizer_at_exit): leave Thread objects
	  unfinalized.  [ruby-dev:38168]
	* gc.c (run_final): frees zombies only.  [ruby-dev:38171]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@23079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-03-27 10:25:23 +00:00
shyouhei
0b85e2a0a7 merge revision(s) 21727:
* gc.c (define_final): cannot define finalizer for immediate
	  values.  [ruby-core:21500]
	* gc.c (define_final): freezes or hides internal values.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@22834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-03-09 00:05:03 +00:00
shyouhei
8837f59485 merge revision(s) 19078,20097:
* gc.c (rb_mark_set): new function to mark keys.
	* marshal.c (struct dump_arg, struct load_arg): added wrappers to mark
	  data entries.  backport from trunk r13527,r13528,r13961,r16533.
	  [ruby-dev:36082]
	* marshal.c (marshal_load): arg.data is no longer a VALUE but a
	  st_table, and freed in load_ensure.  pointed out by pegacorn.
	  [ruby-dev:37008]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@21731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-22 06:22:00 +00:00
shyouhei
3c848f79b7 merge revision(s) 18463:
* gc.c (STACK_LEVEL_MAX, ruby_stack_length): returns size_t.
	  [ruby-core:18207]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@21524 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-15 05:40:26 +00:00
shyouhei
f3a4870b42 merge revision(s) 18392:
* gc.c (gc_sweep, obj_free, run_final): defer finalizers of IO and
	  Data.  [ruby-dev:35578]
	* gc.c (rb_gc_call_finalizer_at_exit): self-referencing finalizers
	  cannot be invoked.  [ruby-dev:35681]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@21435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-11 15:24:53 +00:00
shyouhei
7e57588677 merge revision(s) 18316,18319:
* rubysig.h (CHECK_INTS): gives the chance to perform to deferred
	  finalizers before explicit GC.start or the process termination.
	  [ruby-core:18045]
	* eval.c (rb_thread_schedule): runs deferred finalizers.
	* gc.c (gc_sweep): sets rb_thread_pending to run deferred finalizers.
	* rubysig.h (CHECK_INTS): now checks rb_thread_pending even on
	  platforms where setitimer is not available.  [ruby-core:18045]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@21334 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-05 02:16:18 +00:00
shyouhei
d1911459ae merge revision(s) 17833:17837:
* gc.c (Init_GC): fix syntax error.
	* error.c (rb_exc_new3): keeps the given string itself.
	* eval.c (Init_Proc), gc.c (Init_GC): freeze messages of preallocated
	  special exceptions also.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@18327 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-04 03:24:26 +00:00
shyouhei
c14831d7f1 merge revision(s) 17832:
* eval.c (rb_longjmp): duplicate the thrown exception to set backtrace
	  if it was frozen.  clear all raised flags.
	* eval.c (stack_check): leave clearing flag to rb_longjmp.
	* eval.c (rb_thread_set_raised, rb_thread_reset_raised): use generic
	  flags.
	* eval.c (Init_Proc), gc.c (Init_GC): freeze preallocated special exceptions.
	* gc.c (rb_memerror): use thread raised flag instead of static flag,
	  and raise nomem_error without backtrace if failed to make backtrace.
	  [ruby-dev:34724]
	* gc.c (ruby_xmalloc): increase malloc_increase only if malloc
	  succeeds.  failed malloc size can be huge.  it may increase
	  malloc_limit too big which cause less GC and memory full.
	  (ruby_xrealloc): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@17930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-07 06:17:24 +00:00
shyouhei
719f4c42a9 merge revision(s) 17827,17846:17848:
* gc.c: add rb_during_gc(). based on a patch from arton <artonx AT
	  yahoo.co.jp> at [ruby-dev:35313].   
	* intern.h: ditto.
	* ext/win32ole/win32ole.c: avoid creating Ruby object during
	  GC. thanks to arton <artonx AT yahoo.co.jp>. [ruby-dev:35313]
	* ext/win32ole/tests: add test_win32ole_event.rb, remove
	  testOLEEVENT.rb
	* ext/win32ole/tests/testWIN32OLE.rb(test_convert_bignum):
	  fix test.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@17926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-07 03:29:28 +00:00
knu
5a797c1c77 * gc.c (os_obj_of): assure to not free the scanning heap.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@17029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-08 18:21:56 +00:00
knu
b524523217 Merge from ruby_1_8.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@16511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-05-21 17:27:56 +00:00
kazu
b54786ffbc * signal.c, gc.c: New methods: GC.stress, GC.stress=;
backported from 1.9. a patch from Tadashi Saito
  in [ruby-dev:34394] and bug#19000


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-04-15 07:54:11 +00:00
nobu
9cee075559 * rubyio.h (rb_io_t): renamed from OpenFile.
* ruby.h (struct RHash), file.c, gc.c, io.c, ext/dl/dl.c,
  ext/io/wait/wait.c, ext/pty/pty.c, ext/readline/readline.c,
  ext/socket/socket.c: ditto.

* win32/win32.h: removed workaround for OpenFile.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16025 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-04-15 03:35:55 +00:00
knu
125d830eb8 * array.c (rb_ary_collect_bang, rb_ary_select): Return an
enumerator if no block is given.

* dir.c (dir_each, dir_foreach): Return an enumerator if no block
  is given.

* enum.c (enum_partition, enum_sort_by): Ditto.

* gc.c (os_each_obj): Ditto.

* hash.c (rb_hash_delete_if, rb_hash_reject_bang, rb_hash_select,
  rb_hash_each_value, rb_hash_each_key, rb_hash_each_pair,
  env_each_key, env_each_value, env_each, env_each_pair,
  env_reject_bang, env_delete_if, env_select): Ditto.

* numeric.c (num_step, int_upto, int_downto, int_dotimes): Ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-04-14 08:57:23 +00:00
nobu
ba570c7378 * configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers
__builtin_setjmp, _setjmp over setjmp and sigsetjmp.
  [ruby-core:16023], [ruby-core:16086]

* configure.in (--with-setjmp-type): new option to override the
  default rule in the above.

* eval.c (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp),
  node.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and
  RUBY_JMP_BUF.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-03-31 17:58:14 +00:00
nobu
f5c66ea482 * gc.c: removed trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-03-12 03:49:55 +00:00
akr
c90f8f0918 * gc.c (STACK_LENGTH) [SPARC] : 0x80 offset removed. [ruby-dev:33857]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-02-19 09:37:10 +00:00
shyouhei
e959c8cdc3 * gc.c (rb_newobj): prohibit call of rb_newobj() during gc.
Submitted by Sylvain Joyeux [ruby-core:12099].

* ext/dl/ptr.c: do not use LONG2NUM() inside dlptr_free().
  Slightly modified fix bassed on a patch by Sylvain Joyeux
  [ruby-core:12099] [ ruby-bugs-11859 ] [ ruby-bugs-11882 ]
  [ ruby-patches-13151 ].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15429 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-02-11 07:52:13 +00:00
nobu
9041dfdefc * eval.c, gc.c (setjmp): sigsetjmp is a macro on cygwin.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15151 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-01-21 03:50:14 +00:00
nobu
475449aa18 * configure.in (sigsetjmp): check if available.
* eval.c, gc.c (setjmp): do not use _setjmp if sigsetjmp is available.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15124 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-01-19 02:21:55 +00:00
akr
1202462b6f * gc.c (stack_end_address): use local variable address instead of
__builtin_frame_address(0) to avoid SEGV on SunOS 5.11 on x86 with 
  gcc (GCC) 3.4.3 (csl-sol210-3_4-20050802).


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@14255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-12-17 04:47:24 +00:00
matz
02914c8a16 * gc.c (id2ref): valid id should not refer T_VALUE nor T_ICLASS.
[ruby-dev:31911]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-10-01 13:45:06 +00:00
nobu
7522f72276 * gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
[ruby-dev:31810]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-09-23 00:05:07 +00:00
knu
deeafa0e17 * env.h (SCOPE_CLONE): Introduce a new scope flag to prevent a
local_tbl region from getting freed many times; submitted by
  Chikanaga Tomoyuki <chikanag AT nippon-control-system.co.jp> in
  [ruby-dev:30460].

* eval.c (proc_invoke): Ditto.

* gc.c (obj_free): Ditto.

* parse.y (top_local_setup_gen): Ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-03-03 07:28:54 +00:00
usa
5fbfcbac15 * gc.c (ruby_init_stack): decrease "stack level too deep" in Windows.
merge from trunk.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-12-01 08:03:31 +00:00
matz
bb39b1ea1f * eval.c (rb_eval): fix commit miss. [ruby-dev:29707]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-10-30 03:40:11 +00:00
matz
fc9099e7e3 * gc.c (gc_mark_children): NODE_POSTEXE holds Ruby VALUE.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-09-24 14:29:57 +00:00
akr
53cec657a1 * common.mk, configure.in, defines.h, eval.c, gc.c, main.c,
numeric.c, ruby.h, ia64.s: backport IA64 HP-UX support.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-09-01 18:47:11 +00:00
matz
74483e11f5 * gc.c (gc_sweep): typo fixed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-08-25 08:12:46 +00:00
matz
390aa97698 * dln.c, eval.c, gc.c, regex.c, ruby.h: shut up AIX alloca
warning.  [ruby-dev:29191]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10694 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-08-07 03:43:42 +00:00
matz
ad723e6f24 * st.c (malloc): use xmalloc/xcalloc instead of plain
malloc/calloc, to detect memory allocation failure.  see
  <http://www.nongnu.org/failmalloc/>.

* gc.c (rb_memerror): should not raise empty nomem_error.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10537 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-07-14 17:12:47 +00:00
akr
fb5ff37bae * gc.c (gc_sweep): expand heap earlier.
reported by MORITA Naoyuki.  [ruby-dev:28960]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-07-10 10:26:45 +00:00
akr
00f6107621 * gc.c (id2ref): fix symbol test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10022 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-03-04 06:28:51 +00:00
akr
6828bbeae0 * gc.c: align VALUE with sizeof(RVALUE) globally.
(is_pointer_to_heap): check alignment out of loop.
  (id2ref): avoid collision between symbols and objects.
  (rb_obj_id): ditto.  moved from object.c.
  [ruby-talk:178364] [ruby-core:7401]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-03-02 10:46:17 +00:00
ocean
2b3243d7fa * gc.c: commited magic for reducing RVALUE size on windows. (24->20byte)
[ruby-core:7474]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-03-02 09:01:51 +00:00
matz
492490b857 * gc.c (add_heap): heap_slots may overflow. a patch from Stefan
Weil <weil at mail.berlios.de>.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10009 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-03-01 23:12:06 +00:00
matz
8a3d25a790 * eval.c (rb_call0): argument update propagation. [ruby-dev:28044]
* env.h: remove argc member from struct FRAME.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-02-13 09:10:55 +00:00
eban
a24d4016ac * gc.c (gc_sweep): typo fix.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-02-06 02:49:37 +00:00
akr
84be7576b8 * gc.c (garbage_collect): mark ruby_current_node.
if an exception is raised in a finalizer called by
  rb_gc_call_finalizer_at_exit, ruby_set_current_source may use
  collected ruby_current_node and mark_source_filename may corrupt
  memory.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9821 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-01-10 10:50:17 +00:00
nobu
5f0902a098 * gc.c (garbage_collect): mark objects refered from aborting threads.
[ruby-dev:28190]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-30 09:15:56 +00:00
akr
40d985b57b declare rb_gc_abort_threads.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-29 17:11:28 +00:00
nobu
d5639df795 * eval.c (rb_gc_mark_threads): leave unmarked threads which won't wake
up alone, and mark threads in the loading table.  [ruby-dev:28154]

* eval.c (rb_gc_abort_threads), gc.c (gc_sweep): kill unmarked
  threads.  [ruby-dev:28172]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-29 15:00:15 +00:00
nobu
89eb20764e * eval.c (rb_eval), gc.c (gc_mark_children), node.h (NEW_ALIAS,
NEW_VALIAS), parse.y (fitem): allow dynamic symbols to
  NODE_UNDEF and NODE_ALIAS.
  backported from trunk.  fixed: [ruby-dev:28105]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-26 13:33:14 +00:00
akr
bd0d0153a0 revert previous change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9701 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-16 04:58:51 +00:00
akr
65139d80fe refine "unknown data type" message.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-16 04:49:46 +00:00
akr
f7d72f1e65 precedes registering global VALUE variables before initializing it.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-12-12 03:36:49 +00:00