diff --git a/prelude.rb b/prelude.rb index 04bf850..2dca179 100644 --- a/prelude.rb +++ b/prelude.rb @@ -1,19 +1,3 @@ -class Mutex - # call-seq: - # mutex.synchronize { ... } - # - # Obtains a lock, runs the block, and releases the lock when the - # block completes. See the example under Mutex. - def synchronize - self.lock - begin - yield - ensure - self.unlock rescue nil - end - end -end - class Thread MUTEX_FOR_THREAD_EXCLUSIVE = Mutex.new # :nodoc: diff --git a/thread.c b/thread.c index 69fc299..e6a2e8b 100644 --- a/thread.c +++ b/thread.c @@ -3435,6 +3435,12 @@ rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg) return rb_ensure(func, arg, rb_mutex_unlock, mutex); } +static VALUE +rb_synchronize(VALUE self) +{ + return rb_mutex_synchronize(self, rb_yield, Qnil); +} + /* * Document-class: Barrier */ @@ -4381,6 +4387,7 @@ Init_Thread(void) rb_define_method(rb_cMutex, "lock", rb_mutex_lock, 0); rb_define_method(rb_cMutex, "unlock", rb_mutex_unlock, 0); rb_define_method(rb_cMutex, "sleep", mutex_sleep, -1); + rb_define_method(rb_cMutex, "synchronize", rb_synchronize, 0); recursive_key = rb_intern("__recursive_key__"); rb_eThreadError = rb_define_class("ThreadError", rb_eStandardError);