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(a)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