Skip to content

Commit 88d4b31

Browse files
improve trigger queryables performance
1 parent 5f98235 commit 88d4b31

File tree

2 files changed

+24
-23
lines changed

2 files changed

+24
-23
lines changed

src/session/queryable.c

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,19 @@ static z_result_t _z_trigger_queryables_inner(_z_session_rc_t *zsrc, _z_msg_quer
204204
uint32_t qid) {
205205
_z_session_t *zn = _Z_RC_IN_VAL(zsrc);
206206
_z_queryable_cache_data_t qle_infos = _z_queryable_cache_data_null();
207-
qle_infos.ke_in = _z_keyexpr_alias(q_key);
207+
qle_infos.ke_in = _z_keyexpr_steal(q_key);
208208
// Retrieve sub infos
209-
_Z_RETURN_IF_ERR(_z_session_queryable_get_infos(zn, &qle_infos));
209+
_Z_CLEAN_RETURN_IF_ERR(_z_session_queryable_get_infos(zn, &qle_infos), _z_keyexpr_clear(&qle_infos.ke_in);
210+
_z_value_clear(&msgq->_ext_value); _z_bytes_drop(&msgq->_ext_attachment);
211+
_z_slice_clear(&msgq->_parameters););
210212
// Check if there are queryables
211213
_Z_DEBUG("Triggering %ju queryables for key %d - %.*s", (uintmax_t)qle_infos.qle_nb, qle_infos.ke_out._id,
212214
(int)_z_string_len(&qle_infos.ke_out._suffix), _z_string_data(&qle_infos.ke_out._suffix));
213215
if (qle_infos.qle_nb == 0) {
216+
_z_keyexpr_clear(&qle_infos.ke_in);
217+
_z_value_clear(&msgq->_ext_value);
218+
_z_bytes_drop(&msgq->_ext_attachment);
219+
_z_slice_clear(&msgq->_parameters);
214220
_z_keyexpr_clear(&qle_infos.ke_out);
215221
#if Z_FEATURE_RX_CACHE == 0
216222
_z_queryable_infos_svec_release(&qle_infos.infos); // Otherwise it's released with cache
@@ -238,34 +244,30 @@ static z_result_t _z_trigger_queryables_inner(_z_session_rc_t *zsrc, _z_msg_quer
238244

239245
z_result_t ret = _Z_RES_OK;
240246
// Parse session_queryable svec
241-
for (size_t i = 1; i < qle_infos.qle_nb; i++) {
242-
_z_query_rc_t query_copy;
243-
ret = _z_query_rc_copy(&query_copy, &query);
244-
if (ret != _Z_RES_OK) {
245-
break;
246-
}
247+
for (size_t i = 0; i < qle_infos.qle_nb; i++) {
247248
_z_queryable_infos_t *qle_info = _z_queryable_infos_svec_get(&qle_infos.infos, i);
248-
qle_info->callback(&query_copy, qle_info->arg);
249-
_z_query_rc_drop(&query_copy);
249+
if (i + 1 == qle_infos.qle_nb) {
250+
qle_info->callback(&query, qle_info->arg);
251+
} else {
252+
_z_query_rc_t query_copy;
253+
ret = _z_query_rc_copy(&query_copy, &query);
254+
if (ret != _Z_RES_OK) {
255+
break;
256+
}
257+
qle_info->callback(&query_copy, qle_info->arg);
258+
_z_query_rc_drop(&query_copy);
259+
}
250260
}
251-
252-
_z_queryable_infos_t *qle_info = _z_queryable_infos_svec_get(&qle_infos.infos, 0);
253-
qle_info->callback(&query, qle_info->arg);
254261
_z_query_rc_drop(&query);
255262
#if Z_FEATURE_RX_CACHE == 0
256263
_z_queryable_infos_svec_release(&qle_infos.infos); // Otherwise it's released with cache
257264
#endif
265+
_z_keyexpr_clear(&qle_infos.ke_in);
258266
return ret;
259267
}
260268

261269
z_result_t _z_trigger_queryables(_z_session_rc_t *zsrc, _z_msg_query_t *msgq, _z_keyexpr_t *q_key, uint32_t qid) {
262-
z_result_t ret = _z_trigger_queryables_inner(zsrc, msgq, q_key, qid);
263-
// Clean up
264-
_z_keyexpr_clear(q_key);
265-
_z_value_clear(&msgq->_ext_value);
266-
_z_bytes_drop(&msgq->_ext_attachment);
267-
_z_slice_clear(&msgq->_parameters);
268-
return ret;
270+
return _z_trigger_queryables_inner(zsrc, msgq, q_key, qid);
269271
}
270272

271273
void _z_unregister_session_queryable(_z_session_t *zn, _z_session_queryable_rc_t *qle) {

src/session/subscription.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,9 @@ static z_result_t _z_trigger_subscriptions_inner(_z_session_t *zn, _z_subscriber
278278
}
279279
_z_sample_clear(&sample);
280280
#if Z_FEATURE_RX_CACHE == 0
281-
_z_subscription_infos_svec_release(&sub_infos.infos);
282-
#else
283-
_z_keyexpr_clear(&sub_infos.ke_in);
281+
_z_subscription_infos_svec_release(&sub_infos.infos); // Otherwise it's released with cache
284282
#endif
283+
_z_keyexpr_clear(&sub_infos.ke_in);
285284
return ret;
286285
}
287286

0 commit comments

Comments
 (0)