Module: ProcessShared::PSem
- Extended by:
- FFI::Library, DefineSingletonMethod
- Included in:
- AbstractSemaphore
- Defined in:
- lib/process_shared.rb,
lib/process_shared/psem.rb
Defined Under Namespace
Classes: Error
Class Method Summary collapse
-
.psem_error_check(*syms) ⇒ Object
Replace methods in ‘syms` with error checking wrappers that invoke the original psem method and raise an appropriate error.
Methods included from DefineSingletonMethod
Class Method Details
.psem_error_check(*syms) ⇒ Object
Replace methods in ‘syms` with error checking wrappers that invoke the original psem method and raise an appropriate error.
The last argument is assumed to be a pointer to a pointer where either a psem error or NULL will be stored.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/process_shared/psem.rb', line 29 def psem_error_check(*syms) syms.each do |sym| method = self.method(sym) block = lambda do |*args| if method.call(*args) < 0 errp = args[-1] unless errp.nil? begin err = Error.new(errp.read_pointer) errp.write_pointer(nil) if err[:source] == PSem.e_source_system raise SystemCallError.new("error in #{sym}", err[:errno]) else raise "error in #{sym}: #{err.get_integer(1)}" end ensure psem_error_free(err) end end end end define_method(sym, &block) define_singleton_method(sym, &block) end end |