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.
This commit is contained in:
Wim Taymans 2021-10-07 10:15:21 +02:00
parent 2435f0d7ff
commit 466715672e

View file

@ -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,...) \