[PATCH 2/8] virDriverFeatureIsGlobal: Handle VIR_DRV_FEATURE_REMOTE

Peter Krempa pkrempa at redhat.com
Wed Feb 16 15:41:06 UTC 2022


VIR_DRV_FEATURE_REMOTE is a special flag which is asserted only when the
connection is remote. All drivers implementing it must return 0 for it
to work. Handle it in the global handler and add a comment why.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/driver.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/driver.c b/src/driver.c
index 8c70662ccb..b450400084 100644
--- a/src/driver.c
+++ b/src/driver.c
@@ -333,10 +333,18 @@ virConnectValidateURIPath(const char *uriPath,
  */
 bool
 virDriverFeatureIsGlobal(virDrvFeature feat,
-                         int *supported G_GNUC_UNUSED)
+                         int *supported)

 {
     switch (feat) {
+    /* This is a special case where the generated remote driver dispatcher
+     * function intercepts this specific flag and returns '1'. Thus any local
+     * implementation must return 0, so that the return value properly reflects
+     * whether we are going through the remote driver */
+    case VIR_DRV_FEATURE_REMOTE:
+        *supported = 0;
+        return true;
+
     case VIR_DRV_FEATURE_TYPED_PARAM_STRING:
     case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER:
     case VIR_DRV_FEATURE_FD_PASSING:
@@ -350,7 +358,6 @@ virDriverFeatureIsGlobal(virDrvFeature feat,
     case VIR_DRV_FEATURE_MIGRATION_DIRECT:
     case VIR_DRV_FEATURE_MIGRATION_V1:
     case VIR_DRV_FEATURE_PROGRAM_KEEPALIVE:
-    case VIR_DRV_FEATURE_REMOTE:
     case VIR_DRV_FEATURE_REMOTE_CLOSE_CALLBACK:
     case VIR_DRV_FEATURE_REMOTE_EVENT_CALLBACK:
     default:
-- 
2.35.1




More information about the libvir-list mailing list