mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Avoid creating Hash objects per each mon_synchronize call (#2393)
This commit is contained in:
		
							parent
							
								
									af12172035
								
							
						
					
					
						commit
						9557069299
					
				
				
				Notes:
				
					git
				
				2019-08-31 04:40:14 +09:00 
				
			
			Merged-By: amatsuda <ronnie@dio.jp>
					 1 changed files with 7 additions and 4 deletions
				
			
		|  | @ -87,6 +87,9 @@ | |||
| # MonitorMixin module. | ||||
| # | ||||
| module MonitorMixin | ||||
|   EXCEPTION_NEVER = {Exception => :never}.freeze | ||||
|   EXCEPTION_IMMEDIATE = {Exception => :immediate}.freeze | ||||
| 
 | ||||
|   # | ||||
|   # FIXME: This isn't documented in Nutshell. | ||||
|   # | ||||
|  | @ -103,11 +106,11 @@ module MonitorMixin | |||
|     # even if no other thread doesn't signal. | ||||
|     # | ||||
|     def wait(timeout = nil) | ||||
|       Thread.handle_interrupt(Exception => :never) do | ||||
|       Thread.handle_interrupt(EXCEPTION_NEVER) do | ||||
|         @monitor.__send__(:mon_check_owner) | ||||
|         count = @monitor.__send__(:mon_exit_for_cond) | ||||
|         begin | ||||
|           Thread.handle_interrupt(Exception => :immediate) do | ||||
|           Thread.handle_interrupt(EXCEPTION_IMMEDIATE) do | ||||
|             @cond.wait(@monitor.instance_variable_get(:@mon_mutex), timeout) | ||||
|           end | ||||
|           return true | ||||
|  | @ -227,11 +230,11 @@ module MonitorMixin | |||
|   def mon_synchronize | ||||
|     # Prevent interrupt on handling interrupts; for example timeout errors | ||||
|     # it may break locking state. | ||||
|     Thread.handle_interrupt(Exception => :never){ mon_enter } | ||||
|     Thread.handle_interrupt(EXCEPTION_NEVER){ mon_enter } | ||||
|     begin | ||||
|       yield | ||||
|     ensure | ||||
|       Thread.handle_interrupt(Exception => :never){ mon_exit } | ||||
|       Thread.handle_interrupt(EXCEPTION_NEVER){ mon_exit } | ||||
|     end | ||||
|   end | ||||
|   alias synchronize mon_synchronize | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Akira Matsuda
						Akira Matsuda