Parent

FFI::AutoPointer

Public Class Methods

new(pointer) => the pointer's release() class method will be invoked at GC time click to toggle source

WARNING: passing a proc may cause your pointer to never be GC’d, unless you’re careful to avoid trapping a reference to the pointer in the proc. See the test specs for examples. WARNING: passing a block will cause your pointer to never be GC’d. This is bad.

Please note that the safest, and therefore preferred, calling idiom is to pass a Method as the second parameter. Example usage:

  class PointerHelper
    def self.release(pointer)
      ...
    end
  end

  p = AutoPointer.new(other_pointer, PointerHelper.method(:release))

The above code will cause PointerHelper#release to be invoked at GC time.

The last calling idiom (only one parameter) is generally only going to be useful if you subclass AutoPointer, and override release(), which by default does nothing.

    # File lib/ffi/autopointer.rb, line 59
59:     def initialize(ptr, proc=nil, &block)
60:       raise TypeError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer)          || ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer)
61: 
62:       @releaser = if proc
63:                     raise RuntimeError.new("proc must be callable") unless proc.respond_to?(:call)
64:                     CallableReleaser.new(ptr, proc)
65: 
66:                   else
67:                     raise RuntimeError.new("no release method defined") unless self.class.respond_to?(:release)
68:                     DefaultReleaser.new(ptr, self.class)
69:                   end
70: 
71:       self.parent = ptr
72:       ObjectSpace.define_finalizer(self, @releaser)
73:       self
74:     end

Public Instance Methods

autorelease=(autorelease) click to toggle source
    # File lib/ffi/autopointer.rb, line 81
81:     def autorelease=(autorelease)
82:       @releaser.autorelease=(autorelease)
83:     end
free() click to toggle source
    # File lib/ffi/autopointer.rb, line 77
77:     def free
78:       @releaser.free
79:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.