Граф коммитов

23 Коммитов

Автор SHA1 Сообщение Дата
nobu b3377eaa13 Revert r52995
revert slow atomic operations.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52997 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-09 07:30:44 +00:00
nobu 0599d7de58 use atomic operations
* regcomp.c (onig_chain_link_add): use atomic operation instead of
  mutex.
* regint.h (ONIG_STATE_{INC,DEC}_THREAD): ditto.
* regparse.c (PopFreeNode, node_recycle): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-09 06:48:15 +00:00
nobu e65f38b97d ruby_atomic.h: fix old value type of ATOMIC_CAS
* ruby_atomic.h (ATOMIC_CAS): old value to be swapped should be
  same as the destination.  immediate value may need type
  promotion.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-05 00:56:52 +00:00
nobu c5d2ef80a4 ruby_atomic.h: fix the argument order
* ruby_atomic.h (ATOMIC_SIZE_CAS): fix the argument order of
  InterlockedCompareExchange64.  new value and then old value is
  the last.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-05 00:25:43 +00:00
nobu 22fa19d1dc ruby_atomic.h: fix typo
* ruby_atomic.h (ATOMIC_VALUE_CAS): fix typo.
  TODO: make arguments of all CAS macros consistent.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51781 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-07 06:55:01 +00:00
nobu ec10c033a7 ruby_atomic.h: atomic VALUE operations
* ruby_atomic.h (ATOMIC_VALUE_EXCHANGE, ATOMIC_VALUE_CAS): add
  atomic operations for VALUE.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-08-06 01:44:03 +00:00
nobu 9767eb3001 ruby_atomic.h: refine ATOMIC_PTR_CAS
* ruby_atomic.h (ATOMIC_PTR_CAS): define by generic CAS macro, not
  via size_t, to suppress a warning by mingw gcc.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-21 09:32:40 +00:00
nobu 30c8f9dd83 ruby_atomic.h (ATOMIC_OR): should return previous value
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48036 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-19 17:34:02 +00:00
nobu ff00300834 iseq.c: potential memory leak
* iseq.c (iseq_load): keep type_map to get rid of memory leak.
  based on a patch by Eric Wong at [ruby-core:59699].  [Bug #9399]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-12 07:41:10 +00:00
nobu fb29aefc7a ruby_atomic.h: ATOMIC_PTR_EXCHANGE
* ruby_atomic.h (ATOMIC_PTR_EXCHANGE): atomic exchange function for
  a generic pointer.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-05 01:48:10 +00:00
nobu b8434daf6b ruby_atomic.h: duplicate code
* ruby_atomic.h (ATOMIC_SIZE_CAS): remove duplicate code as
  ATOMIC_CAS().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-05 01:47:58 +00:00
glass 3ff90426d9 * ruby_atomic.h: remove duplicate definisions between ATOMIC_XXX
and ATOMIC_SIZE_XXX.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-27 15:13:08 +00:00
glass b983511292 * ruby_atomic.h: define ATOMIC_SIZE_CAS() with
__atomic_compare_exchange_n() and refactoring.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-27 14:57:33 +00:00
glass 0791c940ad * ruby_atomic.h: use __atomic builtin functions supported by GCC.
__sync family are legacy functions now and it is recommended
  that new code use the __atomic functions.
  http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html

* configure.in: check existence of __atomic functions.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-26 02:45:53 +00:00
ngoto c3c06ff78c * ruby_atomic.h (ATOMIC_SIZE_CAS): fix compile error on Solaris since r43460.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-14 11:40:15 +00:00
nobu 1058f20672 ruby_atomic.h: ATOMIC_SIZE_CAS
* ruby_atomic.h (ATOMIC_SIZE_CAS): new macro, compare and swap size_t.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-29 06:46:33 +00:00
nobu 9f9b476710 ruby_atomic.h: suppress a warning
* ruby_atomic.h (ATOMIC_SIZE_SUB): add cast to suppress a warning by VC++.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43356 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-18 14:23:50 +00:00
nobu 15d4450907 ruby_atomic.h: ATOMIC_CAS on VC6
* ruby_atomic.h (rb_w32_atomic_cas): call InterlockedCompareExchange
  directly.
* ruby_atomic.h (ATOMIC_CAS): fix missing function call.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-03 15:13:06 +00:00
nobu b12ffcb15d ruby_atomic.h: suppress warnigns
* ruby_atomic.h (ATOMIC_CAS): suppress C4022 and C4047 warnings in
  VC6.  only InterlockedCompareExchange is declared using PVOID.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41759 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-03 14:47:42 +00:00
ngoto f70a7cd20f * configure.in (AC_CHECK_HEADERS): atomic.h for Solaris atomic_ops.
* ruby_atomic.h: Skip using Solaris10 atomic_ops on Solaris 9 or earlier if atomic.h is not available. [ruby-dev:47229] [Bug #8228]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-04-06 15:00:44 +00:00
ngoto 5faf4cc77b * ruby_atomic.h (ATOMIC_CAS): added for Solaris and other platforms.
* ruby_atomic.h, signal.c (NEED_RUBY_ATOMIC_OPS): renamed from
  NEED_RUBY_ATOMIC_EXCHANGE.
* signal.c (ruby_atomic_compare_and_swap): naive, non-atomic
  compare-and-swap implementation only used for platforms without
  valid support for atomic operations.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-27 10:21:59 +00:00
kosaki 6190bb4d8a * ruby_atomic.h (ATOMIC_CAS): new macro for compare-and-exchange.
* vm_core.h (struct rb_thread_struct): add interrupt_mask member.
* thread.c (thread_create_core, Init_Thread): initialize
  th->thread_mask.

* vm_core.h (RUBY_VM_INTERRUPTED_ANY): new macro for avoiding
  bare th->interrupt_flag.
* vm_core.h (RUBY_VM_INTERRUPTED, RUBY_VM_INTERRUPTED): check
  th->interrupt_mask.
* thread.c (set_unblock_function, rb_thread_schedule): replace
  th->interrupt_flag with RUBY_VM_INTERRUPTED_ANY()

* signal.c (signal_exec): set up thread->interrupt_mask for
  preventing recursive trap handler.
* vm_core.h (RUBY_VM_CHECK_INTS, RUBY_VM_CHECK_INTS_BLOCKING): ditto.

* thread.c (rb_threadptr_execute_interrupts):
  don't process interrupt if it is masked.
  [Bug #6009] [ruby-core:42524]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37861 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-26 10:57:39 +00:00
ngoto 05a05cc62b * ruby_atomic.h: renamed from atomic.h to avoid header file name conflict
on Solaris 10. [ruby-dev:46414] [Bug #7287]
* gc.c, signal.c, vm_core.h, common.mk: reflect the rename from atomic.h
  to ruby_atomic.h.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-09 16:05:07 +00:00