libvirt_ffi 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/libvirt/connection.rb +52 -18
- data/lib/libvirt/host_callback_storage.rb +7 -4
- data/lib/libvirt/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43c4cf7b7fa510b96605a9f05e8f04680280459d48572085740a71f145ce1442
|
4
|
+
data.tar.gz: a3ca5f72fdeb7de0cc95b440f58c5b894970add2cb746c12e3191d12269dcc42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1b7448f8ebd67349c59a365d1b30072bf99d5f78ffc1b07c87f99a312365f4d42474e62886c71e797fd0deab4c6f726af6440d6c4bb350fb8a65ee751b68ed5
|
7
|
+
data.tar.gz: 24056f945020275a102517bd6f4fba560be15c0f4fea7725b9c4b9b6032a1e94695b1520094c4027bf4ea0e34291e00148efefbb60d114640980e6c69e9f6cae
|
data/lib/libvirt/connection.rb
CHANGED
@@ -5,8 +5,9 @@ module Libvirt
|
|
5
5
|
DOMAIN_EVENT_IDS = FFI::Domain.enum_type(:event_id).symbols.dup.freeze
|
6
6
|
POOL_EVENT_IDS = FFI::Storage.enum_type(:event_id).symbols.dup.freeze
|
7
7
|
|
8
|
-
DOMAIN_STORAGE = HostCallbackStorage.new
|
9
|
-
POOL_STORAGE = HostCallbackStorage.new
|
8
|
+
DOMAIN_STORAGE = HostCallbackStorage.new(:domain_event)
|
9
|
+
POOL_STORAGE = HostCallbackStorage.new(:storage_pool_event)
|
10
|
+
CLOSE_STORAGE = HostCallbackStorage.new(:close)
|
10
11
|
|
11
12
|
DOMAIN_EVENT_CALLBACKS = DOMAIN_EVENT_IDS.map do |event_id_sym|
|
12
13
|
func = FFI::Domain.event_callback_for(event_id_sym) do |conn_ptr, dom_ptr, *args, op_ptr|
|
@@ -34,6 +35,13 @@ module Libvirt
|
|
34
35
|
[event_id_sym, func]
|
35
36
|
end.to_h.freeze
|
36
37
|
|
38
|
+
CLOSE_CALLBACK = FFI::Host.callback_function(:virConnectCloseFunc) do |conn_ptr, reason, op_ptr|
|
39
|
+
Util.log(:debug, 'CLOSE_CALLBACK') { "inside callback conn_ptr=#{conn_ptr}, reason=#{reason}, op_ptr=#{op_ptr}" }
|
40
|
+
connection = Connection.load_ref(conn_ptr)
|
41
|
+
block, opaque = CLOSE_STORAGE.retrieve_from_pointer(op_ptr)
|
42
|
+
block.call(connection, reason, opaque)
|
43
|
+
end
|
44
|
+
|
37
45
|
def self.load_ref(conn_ptr)
|
38
46
|
ref_result = FFI::Host.virConnectRef(conn_ptr)
|
39
47
|
raise Errors::LibError, "Couldn't retrieve connection reference" if ref_result.negative?
|
@@ -154,23 +162,27 @@ module Libvirt
|
|
154
162
|
|
155
163
|
def register_close_callback(opaque = nil, &block)
|
156
164
|
dbg { "#register_close_callback opaque=#{opaque}" }
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
end
|
169
|
-
@close_free_func = FFI::Common.free_function do
|
170
|
-
dbg { "CONNECTION CLOSED FREE FUNC @conn_ptr=#{@conn_ptr}" }
|
171
|
-
@close_cb = @close_free_func = @close_data = nil
|
165
|
+
|
166
|
+
cb_data, cb_data_free_func = CLOSE_STORAGE.allocate_struct
|
167
|
+
result = FFI::Host.virConnectRegisterCloseCallback(
|
168
|
+
@conn_ptr,
|
169
|
+
CLOSE_CALLBACK,
|
170
|
+
cb_data.pointer,
|
171
|
+
cb_data_free_func
|
172
|
+
)
|
173
|
+
if result.negative?
|
174
|
+
cb_data.pointer.free
|
175
|
+
raise Errors::LibError, "Couldn't register connection close callback"
|
172
176
|
end
|
173
|
-
|
177
|
+
|
178
|
+
CLOSE_STORAGE.store_struct(
|
179
|
+
cb_data,
|
180
|
+
connection_pointer: @conn_ptr,
|
181
|
+
callback_id: result,
|
182
|
+
cb: block,
|
183
|
+
opaque: opaque
|
184
|
+
)
|
185
|
+
result
|
174
186
|
end
|
175
187
|
|
176
188
|
# @yield conn, dom, *args
|
@@ -249,6 +261,28 @@ module Libvirt
|
|
249
261
|
result
|
250
262
|
end
|
251
263
|
|
264
|
+
def deregister_storage_pool_event_callback(callback_id)
|
265
|
+
dbg { "#deregister_storage_pool_event_callback callback_id=#{callback_id}" }
|
266
|
+
|
267
|
+
result = FFI::Storage.virConnectStoragePoolEventDeregisterAny(@conn_ptr, callback_id)
|
268
|
+
raise Errors::LibError, "Couldn't deregister storage pool event callback" if result.negative?
|
269
|
+
|
270
|
+
# virConnectStoragePoolEventDeregisterAny will call free func
|
271
|
+
# So we don't need to remove object from POOL_STORAGE here.
|
272
|
+
true
|
273
|
+
end
|
274
|
+
|
275
|
+
def deregister_close_callback
|
276
|
+
dbg { '#deregister_close_callback' }
|
277
|
+
|
278
|
+
result = FFI::Host.virConnectUnregisterCloseCallback(@conn_ptr, CLOSE_CALLBACK)
|
279
|
+
raise Errors::LibError, "Couldn't deregister close callback" if result.negative?
|
280
|
+
|
281
|
+
# virConnectUnregisterCloseCallback will call free func
|
282
|
+
# So we don't need to remove object from CLOSE_STORAGE here.
|
283
|
+
true
|
284
|
+
end
|
285
|
+
|
252
286
|
def lib_version
|
253
287
|
version_ptr = ::FFI::MemoryPointer.new(:ulong)
|
254
288
|
result = FFI::Host.virConnectGetLibVersion(@conn_ptr, version_ptr)
|
@@ -7,7 +7,10 @@ module Libvirt
|
|
7
7
|
:callback_id, :int
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
attr_reader :name
|
11
|
+
|
12
|
+
def initialize(name)
|
13
|
+
@name = name
|
11
14
|
@inner_storage = Hash.new { |h, key| h[key] = {} }
|
12
15
|
end
|
13
16
|
|
@@ -20,7 +23,7 @@ module Libvirt
|
|
20
23
|
cb_data_ptr = ::FFI::MemoryPointer.new(:char, CallbackDataStruct.size, false)
|
21
24
|
cb_data = CallbackDataStruct.new(cb_data_ptr)
|
22
25
|
cb_data_free_func = FFI::Common.free_function do |pointer|
|
23
|
-
dbg {
|
26
|
+
dbg { "cb_data_free_func triggered pointer=#{pointer}" }
|
24
27
|
remove_struct(pointer)
|
25
28
|
end
|
26
29
|
[cb_data, cb_data_free_func]
|
@@ -35,7 +38,7 @@ module Libvirt
|
|
35
38
|
end
|
36
39
|
|
37
40
|
def remove_struct(pointer)
|
38
|
-
dbg { "#remove_struct pointer=#{pointer}" }
|
41
|
+
dbg { "#remove_struct pointer=#{pointer}," }
|
39
42
|
|
40
43
|
cb_data_struct = CallbackDataStruct.new(pointer)
|
41
44
|
connection_pointer = cb_data_struct[:connection_pointer]
|
@@ -63,7 +66,7 @@ module Libvirt
|
|
63
66
|
private
|
64
67
|
|
65
68
|
def dbg(&block)
|
66
|
-
Util.log(:debug,
|
69
|
+
Util.log(:debug, "Libvirt::HostCallbackStorage(#{name})", &block)
|
67
70
|
end
|
68
71
|
end
|
69
72
|
end
|
data/lib/libvirt/version.rb
CHANGED