зеркало из https://github.com/github/ruby.git
* thread_pthread.c (lock_func): should not check interrupts in
blocking region. [ruby-dev:34378] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15990 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
db0c3eb8c0
Коммит
31a060f7bd
|
@ -1,3 +1,8 @@
|
|||
Sun Apr 13 18:52:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* thread_pthread.c (lock_func): should not check interrupts in
|
||||
blocking region. [ruby-dev:34378]
|
||||
|
||||
Sat Apr 12 12:41:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (ruby_exec_node, ruby_run_node), ruby.c (process_options):
|
||||
|
|
22
thread.c
22
thread.c
|
@ -2317,23 +2317,23 @@ rb_mutex_trylock(VALUE self)
|
|||
return locked;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
static int
|
||||
lock_func(rb_thread_t *th, mutex_t *mutex)
|
||||
{
|
||||
int interrupted = Qfalse;
|
||||
|
||||
native_mutex_lock(&mutex->lock);
|
||||
while (mutex->th) {
|
||||
while (mutex->th || (mutex->th = th, 0)) {
|
||||
mutex->cond_waiting++;
|
||||
native_cond_wait(&mutex->cond, &mutex->lock);
|
||||
|
||||
if (th->interrupt_flag) {
|
||||
native_mutex_unlock(&mutex->lock);
|
||||
RUBY_VM_CHECK_INTS();
|
||||
native_mutex_lock(&mutex->lock);
|
||||
interrupted = Qtrue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex->th = th;
|
||||
native_mutex_unlock(&mutex->lock);
|
||||
return Qnil;
|
||||
return interrupted;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2364,11 +2364,15 @@ rb_mutex_lock(VALUE self)
|
|||
GetMutexPtr(self, mutex);
|
||||
|
||||
while (mutex->th != th) {
|
||||
int interrupted;
|
||||
|
||||
BLOCKING_REGION({
|
||||
lock_func(th, mutex);
|
||||
interrupted = lock_func(th, mutex);
|
||||
}, lock_interrupt, mutex);
|
||||
|
||||
RUBY_VM_CHECK_INTS();
|
||||
if (interrupted) {
|
||||
RUBY_VM_CHECK_INTS();
|
||||
}
|
||||
}
|
||||
}
|
||||
return self;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define RUBY_VERSION "1.9.0"
|
||||
#define RUBY_RELEASE_DATE "2008-04-12"
|
||||
#define RUBY_RELEASE_DATE "2008-04-13"
|
||||
#define RUBY_VERSION_CODE 190
|
||||
#define RUBY_RELEASE_CODE 20080412
|
||||
#define RUBY_RELEASE_CODE 20080413
|
||||
#define RUBY_PATCHLEVEL 0
|
||||
|
||||
#define RUBY_VERSION_MAJOR 1
|
||||
|
@ -9,7 +9,7 @@
|
|||
#define RUBY_VERSION_TEENY 0
|
||||
#define RUBY_RELEASE_YEAR 2008
|
||||
#define RUBY_RELEASE_MONTH 4
|
||||
#define RUBY_RELEASE_DAY 12
|
||||
#define RUBY_RELEASE_DAY 13
|
||||
|
||||
#ifdef RUBY_EXTERN
|
||||
RUBY_EXTERN const char ruby_version[];
|
||||
|
|
Загрузка…
Ссылка в новой задаче