HEX
Server: Apache
System: Linux opal14.opalstack.com 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64
User: curbgloabal_opal (1234)
PHP: 8.1.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/share/ri/2.6.0/system/Thread/handle_interrupt-c.ri
U:RDoc::AnyMethod[iI"handle_interrupt:ETI"Thread::handle_interrupt;TT:publico:RDoc::Markup::Document:@parts[2o:RDoc::Markup::Paragraph;	[I"+Changes asynchronous interrupt timing.;To:RDoc::Markup::BlankLineo;
;	[	I"F_interrupt_ means asynchronous event and corresponding procedure ;TI"Cby Thread#raise, Thread#kill, signal trap (not supported yet) ;TI"Fand main thread termination (if main thread terminates, then all ;TI""other thread will be killed).;T@o;
;	[I"=The given +hash+ has pairs like <code>ExceptionClass => ;TI"P:TimingSymbol</code>. Where the ExceptionClass is the interrupt handled by ;TI"Kthe given block. The TimingSymbol can be one of the following symbols:;T@o:RDoc::Markup::List:
@type:
LABEL:@items[o:RDoc::Markup::ListItem:@label[I"+:immediate+;T;	[o;
;	[I"#Invoke interrupts immediately.;To;;[I"+:on_blocking+;T;	[o;
;	[I"1Invoke interrupts while _BlockingOperation_.;To;;[I"
+:never+;T;	[o;
;	[I"!Never invoke all interrupts.;T@o;
;	[I"Q_BlockingOperation_ means that the operation will block the calling thread, ;TI"Rsuch as read and write.  On CRuby implementation, _BlockingOperation_ is any ;TI"$operation executed without GVL.;T@o;
;	[I"HMasked asynchronous interrupts are delayed until they are enabled. ;TI".This method is similar to sigprocmask(3).;T@S:RDoc::Markup::Heading:
leveli:	textI"	NOTE;T@o;
;	[I"2Asynchronous interrupts are difficult to use.;T@o;
;	[I"bIf you need to communicate between threads, please consider to use another way such as Queue.;T@o;
;	[I";Or use them with deep understanding about this method.;T@S;;i;I"
Usage;T@o;
;	[I"@In this example, we can guard from Thread#raise exceptions.;T@o;
;	[I"OUsing the +:never+ TimingSymbol the RuntimeError exception will always be ;TI"Bignored in the first block of the main thread. In the second ;TI"Q::handle_interrupt block we can purposefully handle RuntimeError exceptions.;T@o:RDoc::Markup::Verbatim;	[I"th = Thread.new do
;TI"9  Thread.handle_interrupt(RuntimeError => :never) {
;TI"    begin
;TI"<      # You can write resource allocation code safely.
;TI"A      Thread.handle_interrupt(RuntimeError => :immediate) {
;TI"        # ...
;TI"
      }
;TI"    ensure
;TI">      # You can write resource deallocation code safely.
;TI"
    end
;TI"	  }
;TI"	end
;TI"Thread.pass
;TI"# ...
;TI"th.raise "stop"
;T:@format0o;
;	[I"NWhile we are ignoring the RuntimeError exception, it's safe to write our ;TI"Mresource allocation code. Then, the ensure block is where we can safely ;TI"deallocate your resources.;T@S;;i	;I"!Guarding from Timeout::Error;T@o;
;	[	I"PIn the next example, we will guard from the Timeout::Error exception. This ;TI"Swill help prevent from leaking resources when Timeout::Error exceptions occur ;TI"Jduring normal ensure clause. For this example we use the help of the ;TI"2standard library Timeout, from lib/timeout.rb;T@o;;	[I"require 'timeout'
;TI"9Thread.handle_interrupt(Timeout::Error => :never) {
;TI"  timeout(10){
;TI"-    # Timeout::Error doesn't occur here
;TI"C    Thread.handle_interrupt(Timeout::Error => :on_blocking) {
;TI"5      # possible to be killed by Timeout::Error
;TI"&      # while blocking operation
;TI"    }
;TI"-    # Timeout::Error doesn't occur here
;TI"	  }
;TI"}
;T;0o;
;	[	I"SIn the first part of the +timeout+ block, we can rely on Timeout::Error being ;TI"Qignored. Then in the <code>Timeout::Error => :on_blocking</code> block, any ;TI"Foperation that will block the calling thread is susceptible to a ;TI"+Timeout::Error exception being raised.;T@S;;i	;I"Stack control settings;T@o;
;	[I"RIt's possible to stack multiple levels of ::handle_interrupt blocks in order ;TI"Hto control more than one ExceptionClass and TimingSymbol at a time.;T@o;;	[
I"3Thread.handle_interrupt(FooError => :never) {
;TI"5  Thread.handle_interrupt(BarError => :never) {
;TI"2     # FooError and BarError are prohibited.
;TI"	  }
;TI"}
;T;0S;;i	;I"$Inheritance with ExceptionClass;T@o;
;	[I"SAll exceptions inherited from the ExceptionClass parameter will be considered.;T@o;;	[I"4Thread.handle_interrupt(Exception => :never) {
;TI"A  # all exceptions inherited from Exception are prohibited.
;TI"};T;0:
@fileI"
thread.c;T:0@omit_headings_from_table_of_contents_below0I"BThread.handle_interrupt(hash) { ... } -> result of the block
;T0[I"	(p1);T@�FI"Thread;TcRDoc::NormalClass00