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@xxxxxxxxxx> --- 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