Class: Hakuban::FFI::FFIFuture
- Inherits:
-
Object
- Object
- Hakuban::FFI::FFIFuture
- Defined in:
- lib/hakuban/ffi.rb
Class Method Summary collapse
-
.await(future_pointer) ⇒ Object
This HAS to be called with interrupts disabled.
Class Method Details
.await(future_pointer) ⇒ Object
This HAS to be called with interrupts disabled. If both, internal exception, and an interrupt fire, pay attention not to drop one of them.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/hakuban/ffi.rb', line 56 def self.await(future_pointer) error = result_thread = result = nil future_pointer_for_blocking_await = Hakuban::FFI::hakuban_future_clone(future_pointer) begin # ThreadError gets raised here on process shutdown result_thread = Thread.new { Hakuban::FFI::hakuban_future_await(future_pointer_for_blocking_await) } Thread.handle_interrupt(Object => :immediate) { result_thread.join } rescue Object => e error = e end Hakuban::FFI::hakuban_future_drop(future_pointer) if result_thread result = result_thread.join_with_warning else Hakuban::FFI::hakuban_future_drop(future_pointer_for_blocking_await) end return [result, error] end |