Class: ReservedNames::Win32::Handle
- Inherits:
-
Object
- Object
- ReservedNames::Win32::Handle
- Extended by:
- Chef::ReservedNames::Win32::API::Process
- Defined in:
- lib/chef/win32/handle.rb
Instance Attribute Summary collapse
-
#handle ⇒ Object
readonly
Returns the value of attribute handle.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(handle) ⇒ Handle
constructor
A new instance of Handle.
Constructor Details
#initialize(handle) ⇒ Handle
Returns a new instance of Handle.
29 30 31 32 |
# File 'lib/chef/win32/handle.rb', line 29 def initialize(handle) @handle = handle ObjectSpace.define_finalizer(self, Handle.close_handle_finalizer(handle)) end |
Instance Attribute Details
#handle ⇒ Object (readonly)
Returns the value of attribute handle.
34 35 36 |
# File 'lib/chef/win32/handle.rb', line 34 def handle @handle end |
Class Method Details
.close_handle(handle) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/chef/win32/handle.rb', line 40 def self.close_handle(handle) # According to http://msdn.microsoft.com/en-us/library/windows/desktop/ms683179(v=vs.85).aspx, it is not necessary # to close the pseudo handle returned by the GetCurrentProcess function. The docs also say that it doesn't hurt to call # CloseHandle on it. However, doing so from inside of Ruby always seems to produce an invalid handle error. # The recommendation is to use GetCurrentProcess instead of the const (HANDLE)-1, to ensure we're making the correct comparison. return if handle == GetCurrentProcess() unless CloseHandle(handle) Chef::ReservedNames::Win32::Error.raise! end end |
.close_handle_finalizer(handle) ⇒ Object
36 37 38 |
# File 'lib/chef/win32/handle.rb', line 36 def self.close_handle_finalizer(handle) proc { close_handle(handle) } end |