Commit graph

245 commits

Author SHA1 Message Date
nobu
abbe26c60f * 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]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@19078 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-03 07:53:19 +00:00
nobu
363cad3261 * 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@18463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-09 23:56:17 +00:00
nobu
2a876ff2c6 * 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@18397 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-06 20:05:48 +00:00
nobu
3190304db7 * 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.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@18394 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-06 12:25:47 +00:00
nobu
9d93480190 * 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@18392 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-06 11:52:11 +00:00
nobu
42ec1fa621 * 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@18319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-08-02 07:08:18 +00:00
akr
5daa2e16f0 * gc.c (Init_GC): fix syntax error.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@17837 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-03 01:03:51 +00:00
nobu
86c58b7813 * 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@17834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-02 22:03:24 +00:00
nobu
a9d25a31ee * 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@17832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-02 21:17:31 +00:00
suke
77ec4ead90 * gc.c: add rb_during_gc(). based on a patch from arton <artonx AT
yahoo.co.jp> at [ruby-dev:35313].   

* intern.h: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@17827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-02 17:54:25 +00:00
nobu
2cec384adc * gc.c (rb_memerror): exit with EXIT_FAILURE instead of magic number.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@17144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-13 05:24:40 +00:00
nobu
043222ba7c * gc.c (CHECK_STACK): STACK_LENGTH should be less than
STACK_LEVEL_MAX.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@17143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-13 05:19:14 +00:00
akr
2f5aa44b8e * 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@16872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-07 08:12:44 +00:00
nobu
722ad8f214 * eval.c (search_method, remove_method, error_print, rb_alias)
(rb_eval, rb_rescue2, search_required, Init_eval, rb_thread_create),
  gc.c (rb_source_filename, Init_stack), io.c (rb_io_getline),
  parse.y (rb_id2name, rb_parser_free): suppress warnings.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-05-21 14:29:55 +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
nobu
fa50f60316 * eval.c, gc.c, time.c: made internal symbols static. [ruby-dev:27435]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9413 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-10-18 17:36:20 +00:00