From 466715672ede2210967fde78ab6b14f293cb8428 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 7 Oct 2021 10:15:21 +0200 Subject: [PATCH] log: fix logger fallback The logt function should fall back when both the logger implementation version is too low or when the method is not implemented. We can use the new spa_callback_call return value to efficiently handle this. --- spa/include/spa/support/log.h | 54 ++++++++++++++++------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/spa/include/spa/support/log.h b/spa/include/spa/support/log.h index 4cb0db4fc..e4990d1bb 100644 --- a/spa/include/spa/support/log.h +++ b/spa/include/spa/support/log.h @@ -238,41 +238,35 @@ do { \ }) /* Transparently calls to version 0 log if v1 is not supported */ -#define spa_log_logt(l,lev,topic,...) \ -({ \ - struct spa_log *_l = l; \ - struct spa_interface *_if = &_l->iface; \ +#define spa_log_logt(l,lev,topic,...) \ +({ \ + struct spa_log *_l = l; \ + struct spa_interface *_if = &_l->iface; \ if (SPA_UNLIKELY(spa_log_level_topic_enabled(_l, topic, lev))) { \ - if (spa_interface_callback_version_min( \ - _if, struct spa_log_methods, 1)) \ - spa_interface_call(_if, \ - struct spa_log_methods, logt, 1, \ - lev, topic, \ - __VA_ARGS__); \ - else \ - spa_interface_call(_if, \ - struct spa_log_methods, log, 0, \ - lev, __VA_ARGS__); \ - } \ + if (!spa_interface_call(_if, \ + struct spa_log_methods, logt, 1, \ + lev, topic, \ + __VA_ARGS__)) \ + spa_interface_call(_if, \ + struct spa_log_methods, log, 0, \ + lev, __VA_ARGS__); \ + } \ }) /* Transparently calls to version 0 logv if v1 is not supported */ -#define spa_log_logtv(l,lev,topic,...) \ -({ \ - struct spa_log *_l = l; \ - struct spa_interface *_if = &_l->iface; \ +#define spa_log_logtv(l,lev,topic,...) \ +({ \ + struct spa_log *_l = l; \ + struct spa_interface *_if = &_l->iface; \ if (SPA_UNLIKELY(spa_log_level_topic_enabled(_l, topic, lev))) { \ - if (spa_interface_callback_version_min( \ - _if, struct spa_log_methods, 1)) \ - spa_interface_call(_if, \ - struct spa_log_methods, logtv, 1, \ - lev, topic, \ - __VA_ARGS__); \ - else \ - spa_interface_call(_if, \ - struct spa_log_methods, logv, 0, \ - lev, __VA_ARGS__); \ - } \ + if (!spa_interface_call(_if, \ + struct spa_log_methods, logtv, 1, \ + lev, topic, \ + __VA_ARGS__)) \ + spa_interface_call(_if, \ + struct spa_log_methods, logv, 0, \ + lev, __VA_ARGS__); \ + } \ }) #define spa_log_log(l,lev,...) \