@@ -245,8 +245,8 @@ static z_result_t _z_trigger_subscriptions_inner(_z_session_t *zn, _z_subscriber
245
245
z_reliability_t reliability ) {
246
246
// Retrieve sub infos
247
247
_z_subscription_cache_data_t sub_infos = _z_subscription_cache_data_null ();
248
- sub_infos .ke_in = _z_keyexpr_alias (keyexpr );
249
- _Z_CLEAN_RETURN_IF_ERR (_z_subscription_get_infos (zn , sub_kind , & sub_infos ), _z_keyexpr_clear (keyexpr );
248
+ sub_infos .ke_in = _z_keyexpr_steal (keyexpr );
249
+ _Z_CLEAN_RETURN_IF_ERR (_z_subscription_get_infos (zn , sub_kind , & sub_infos ), _z_keyexpr_clear (& sub_infos . ke_in );
250
250
_z_encoding_clear (encoding ); _z_bytes_drop (payload ); _z_bytes_drop (attachment ););
251
251
// Check if there are subs
252
252
_Z_DEBUG ("Triggering %ju subs for key %d - %.*s" , (uintmax_t )sub_infos .sub_nb , sub_infos .ke_out ._id ,
@@ -257,25 +257,31 @@ static z_result_t _z_trigger_subscriptions_inner(_z_session_t *zn, _z_subscriber
257
257
258
258
z_result_t ret = _Z_RES_OK ;
259
259
// Parse subscription infos svec
260
- for (size_t i = 0 ; i < sub_infos .sub_nb ; i ++ ) {
261
- _z_subscription_infos_t * sub_info = _z_subscription_infos_svec_get (& sub_infos .infos , i );
262
- if (i + 1 == sub_infos .sub_nb ) {
263
- sub_info -> callback (& sample , sub_info -> arg );
264
- } else {
265
- _z_sample_t sample_copy ;
266
- ret = _z_sample_copy (& sample_copy , & sample );
267
- if (ret != _Z_RES_OK ) {
268
- break ;
260
+ if (sub_infos .sub_nb == 1 ) {
261
+ _z_subscription_infos_t * sub_info = _z_subscription_infos_svec_get (& sub_infos .infos , 0 );
262
+ sub_info -> callback (& sample , sub_info -> arg );
263
+ } else {
264
+ for (size_t i = 0 ; i < sub_infos .sub_nb ; i ++ ) {
265
+ _z_subscription_infos_t * sub_info = _z_subscription_infos_svec_get (& sub_infos .infos , i );
266
+ if (i + 1 == sub_infos .sub_nb ) {
267
+ sub_info -> callback (& sample , sub_info -> arg );
268
+ } else {
269
+ _z_sample_t sample_copy ;
270
+ ret = _z_sample_copy (& sample_copy , & sample );
271
+ if (ret != _Z_RES_OK ) {
272
+ break ;
273
+ }
274
+ sub_info -> callback (& sample_copy , sub_info -> arg );
275
+ _z_sample_clear (& sample_copy );
269
276
}
270
- sub_info -> callback (& sample_copy , sub_info -> arg );
271
- _z_sample_clear (& sample_copy );
272
277
}
273
278
}
274
279
_z_sample_clear (& sample );
275
280
#if Z_FEATURE_RX_CACHE == 0
276
281
_z_subscription_infos_svec_release (& sub_infos .infos );
282
+ #else
283
+ _z_keyexpr_clear (& sub_infos .ke_in );
277
284
#endif
278
- _z_keyexpr_clear (keyexpr );
279
285
return ret ;
280
286
}
281
287
0 commit comments