@@ -737,6 +737,7 @@ static z_result_t _z_session_rc_init(z_owned_session_t *zs, _z_id_t *zid) {
737737}
738738
739739z_result_t z_open (z_owned_session_t * zs , z_moved_config_t * config , const z_open_options_t * options ) {
740+ z_internal_session_null (zs );
740741#if Z_FEATURE_MULTI_THREAD == 1
741742 z_open_options_t opts ;
742743 if (options == NULL ) {
@@ -1337,26 +1338,32 @@ z_entity_global_id_t z_publisher_id(const z_loaned_publisher_t *publisher) {
13371338#if Z_FEATURE_MATCHING == 1
13381339z_result_t z_publisher_declare_background_matching_listener (const z_loaned_publisher_t * publisher ,
13391340 z_moved_closure_matching_status_t * callback ) {
1340- z_owned_matching_listener_t listener ;
1341- _Z_RETURN_IF_ERR (z_publisher_declare_matching_listener (publisher , & listener , callback ));
1342- _z_matching_listener_clear (& listener ._val );
1343- return _Z_RES_OK ;
1341+ return z_publisher_declare_matching_listener (publisher , NULL , callback );
13441342}
13451343
13461344z_result_t z_publisher_declare_matching_listener (const z_loaned_publisher_t * publisher ,
13471345 z_owned_matching_listener_t * matching_listener ,
13481346 z_moved_closure_matching_status_t * callback ) {
1349- matching_listener -> _val = _z_matching_listener_null ();
13501347 _z_session_rc_t sess_rc = _z_session_weak_upgrade_if_open (& publisher -> _zn );
1348+ z_result_t ret = _Z_RES_OK ;
13511349 if (!_Z_RC_IS_NULL (& sess_rc )) {
1352- matching_listener -> _val = _z_matching_listener_declare (
1353- & publisher -> _filter .ctx , _z_get_entity_id (_Z_RC_IN_VAL (& sess_rc )), & callback -> _this ._val );
1350+ if (matching_listener != NULL ) {
1351+ matching_listener -> _val = _z_matching_listener_null ();
1352+ ret = _z_matching_listener_declare (& matching_listener -> _val , _Z_RC_IN_VAL (& sess_rc ),
1353+ & publisher -> _filter .ctx , & callback -> _this ._val );
1354+ } else {
1355+ uint32_t _listener_id ;
1356+ ret = _z_matching_listener_register (& _listener_id , _Z_RC_IN_VAL (& sess_rc ), & publisher -> _filter .ctx ,
1357+ & callback -> _this ._val );
1358+ }
13541359 _z_session_rc_drop (& sess_rc );
13551360 } else {
1356- matching_listener -> _val = _z_matching_listener_null ();
1357- z_internal_closure_matching_status_null (& callback -> _this );
1361+ if (matching_listener != NULL ) {
1362+ matching_listener -> _val = _z_matching_listener_null ();
1363+ }
1364+ ret = _Z_ERR_GENERIC ;
13581365 }
1359- return _z_matching_listener_check ( & matching_listener -> _val ) ? _Z_RES_OK : _Z_ERR_GENERIC ;
1366+ return ret ;
13601367}
13611368
13621369z_result_t z_publisher_get_matching_status (const z_loaned_publisher_t * publisher ,
@@ -1433,10 +1440,10 @@ z_result_t z_get_with_parameters_substr(const z_loaned_session_t *zs, const z_lo
14331440#if Z_FEATURE_LOCAL_QUERYABLE == 1
14341441 allowed_destination = opt .allowed_destination ;
14351442#endif
1436- ret = _z_query (zs , keyexpr , parameters , parameters_len , opt .target , opt . consolidation . mode ,
1437- _z_bytes_from_moved (opt .payload ), _z_encoding_from_moved (opt .encoding ), closure . call , closure . drop ,
1438- closure .context , opt .timeout_ms , _z_bytes_from_moved (opt .attachment ), qos , source_info ,
1439- allowed_destination , cancellation_token );
1443+ ret = _z_query (zs , _z_optional_id_make_none (), keyexpr , parameters , parameters_len , opt .target ,
1444+ opt . consolidation . mode , _z_bytes_from_moved (opt .payload ), _z_encoding_from_moved (opt .encoding ),
1445+ closure .call , closure . drop , closure . context , opt .timeout_ms , _z_bytes_from_moved (opt .attachment ),
1446+ qos , source_info , allowed_destination , cancellation_token );
14401447 // Clean-up
14411448#ifdef Z_FEATURE_UNSTABLE_API
14421449 z_cancellation_token_drop (opt .cancellation_token );
@@ -1557,10 +1564,11 @@ z_result_t z_querier_get_with_parameters_substr(const z_loaned_querier_t *querie
15571564 if (should_proceed ) {
15581565 _z_n_qos_t qos = _z_n_qos_make (querier -> _is_express , querier -> _congestion_control == Z_CONGESTION_CONTROL_BLOCK ,
15591566 querier -> _priority );
1560- ret = _z_query (& sess_rc , & querier -> _key , parameters , parameters_len , querier -> _target ,
1561- querier -> _consolidation_mode , _z_bytes_from_moved (opt .payload ), & encoding , closure .call ,
1562- closure .drop , closure .context , querier -> _timeout_ms , _z_bytes_from_moved (opt .attachment ), qos ,
1563- source_info , querier -> _allowed_destination , cancellation_token );
1567+ ret = _z_query (& sess_rc , _z_optional_id_make_some (querier -> _id ), & querier -> _key , parameters , parameters_len ,
1568+ querier -> _target , querier -> _consolidation_mode , _z_bytes_from_moved (opt .payload ), & encoding ,
1569+ closure .call , closure .drop , closure .context , querier -> _timeout_ms ,
1570+ _z_bytes_from_moved (opt .attachment ), qos , source_info , querier -> _allowed_destination ,
1571+ cancellation_token );
15641572 } else if (closure .drop != NULL ) {
15651573 closure .drop (closure .context );
15661574 }
@@ -1613,25 +1621,31 @@ z_entity_global_id_t z_querier_id(const z_loaned_querier_t *querier) {
16131621#if Z_FEATURE_MATCHING == 1
16141622z_result_t z_querier_declare_background_matching_listener (const z_loaned_querier_t * querier ,
16151623 z_moved_closure_matching_status_t * callback ) {
1616- z_owned_matching_listener_t listener ;
1617- _Z_RETURN_IF_ERR (z_querier_declare_matching_listener (querier , & listener , callback ));
1618- _z_matching_listener_clear (& listener ._val );
1619- return _Z_RES_OK ;
1624+ return z_querier_declare_matching_listener (querier , NULL , callback );
16201625}
16211626z_result_t z_querier_declare_matching_listener (const z_loaned_querier_t * querier ,
16221627 z_owned_matching_listener_t * matching_listener ,
16231628 z_moved_closure_matching_status_t * callback ) {
1624- matching_listener -> _val = _z_matching_listener_null ();
16251629 _z_session_rc_t sess_rc = _z_session_weak_upgrade_if_open (& querier -> _zn );
1630+ z_result_t ret = _Z_RES_OK ;
16261631 if (!_Z_RC_IS_NULL (& sess_rc )) {
1627- matching_listener -> _val = _z_matching_listener_declare (
1628- & querier -> _filter .ctx , _z_get_entity_id (_Z_RC_IN_VAL (& sess_rc )), & callback -> _this ._val );
1632+ if (matching_listener != NULL ) {
1633+ matching_listener -> _val = _z_matching_listener_null ();
1634+ ret = _z_matching_listener_declare (& matching_listener -> _val , _Z_RC_IN_VAL (& sess_rc ), & querier -> _filter .ctx ,
1635+ & callback -> _this ._val );
1636+ } else {
1637+ uint32_t _listener_id ;
1638+ ret = _z_matching_listener_register (& _listener_id , _Z_RC_IN_VAL (& sess_rc ), & querier -> _filter .ctx ,
1639+ & callback -> _this ._val );
1640+ }
16291641 _z_session_rc_drop (& sess_rc );
16301642 } else {
1631- matching_listener -> _val = _z_matching_listener_null ();
1632- z_internal_closure_matching_status_null (& callback -> _this );
1643+ if (matching_listener != NULL ) {
1644+ matching_listener -> _val = _z_matching_listener_null ();
1645+ }
1646+ ret = _Z_ERR_GENERIC ;
16331647 }
1634- return _z_matching_listener_check ( & matching_listener -> _val ) ? _Z_RES_OK : _Z_ERR_GENERIC ;
1648+ return ret ;
16351649}
16361650
16371651z_result_t z_querier_get_matching_status (const z_loaned_querier_t * querier , z_matching_status_t * matching_status ) {
@@ -1691,10 +1705,7 @@ void z_queryable_options_default(z_queryable_options_t *options) {
16911705
16921706z_result_t z_declare_background_queryable (const z_loaned_session_t * zs , const z_loaned_keyexpr_t * keyexpr ,
16931707 z_moved_closure_query_t * callback , const z_queryable_options_t * options ) {
1694- z_owned_queryable_t qle ;
1695- _Z_RETURN_IF_ERR (z_declare_queryable (zs , & qle , keyexpr , callback , options ));
1696- _z_queryable_clear (& qle ._val );
1697- return _Z_RES_OK ;
1708+ return z_declare_queryable (zs , NULL , keyexpr , callback , options );
16981709}
16991710
17001711z_result_t z_declare_queryable (const z_loaned_session_t * zs , z_owned_queryable_t * queryable ,
@@ -1713,8 +1724,14 @@ z_result_t z_declare_queryable(const z_loaned_session_t *zs, z_owned_queryable_t
17131724#if Z_FEATURE_LOCAL_QUERYABLE == 1
17141725 allowed_origin = opt .allowed_origin ;
17151726#endif
1716- return _z_declare_queryable (& queryable -> _val , zs , keyexpr , opt .complete , closure .call , closure .drop ,
1717- closure .context , allowed_origin );
1727+ if (queryable != NULL ) {
1728+ return _z_declare_queryable (& queryable -> _val , zs , keyexpr , opt .complete , closure .call , closure .drop ,
1729+ closure .context , allowed_origin );
1730+ } else {
1731+ uint32_t _queryable_id ;
1732+ return _z_register_queryable (& _queryable_id , zs , keyexpr , opt .complete , closure .call , closure .drop ,
1733+ closure .context , allowed_origin , NULL );
1734+ }
17181735}
17191736
17201737z_result_t z_undeclare_queryable (z_moved_queryable_t * queryable ) {
@@ -1979,18 +1996,14 @@ void z_subscriber_options_default(z_subscriber_options_t *options) {
19791996
19801997z_result_t z_declare_background_subscriber (const z_loaned_session_t * zs , const z_loaned_keyexpr_t * keyexpr ,
19811998 z_moved_closure_sample_t * callback , const z_subscriber_options_t * options ) {
1982- z_owned_subscriber_t sub ;
1983- _Z_RETURN_IF_ERR (z_declare_subscriber (zs , & sub , keyexpr , callback , options ));
1984- _z_subscriber_clear (& sub ._val );
1985- return _Z_RES_OK ;
1999+ return z_declare_subscriber (zs , NULL , keyexpr , callback , options );
19862000}
19872001
19882002z_result_t z_declare_subscriber (const z_loaned_session_t * zs , z_owned_subscriber_t * sub ,
19892003 const z_loaned_keyexpr_t * keyexpr , z_moved_closure_sample_t * callback ,
19902004 const z_subscriber_options_t * options ) {
19912005 _z_closure_sample_t closure = callback -> _this ._val ;
19922006 z_internal_closure_sample_null (& callback -> _this );
1993- sub -> _val = _z_subscriber_null ();
19942007
19952008 z_subscriber_options_t opt ;
19962009 z_subscriber_options_default (& opt );
@@ -2002,7 +2015,15 @@ z_result_t z_declare_subscriber(const z_loaned_session_t *zs, z_owned_subscriber
20022015#if Z_FEATURE_LOCAL_SUBSCRIBER == 1
20032016 allowed_origin = opt .allowed_origin ;
20042017#endif
2005- return _z_declare_subscriber (& sub -> _val , zs , keyexpr , closure .call , closure .drop , closure .context , allowed_origin );
2018+ if (sub != NULL ) {
2019+ sub -> _val = _z_subscriber_null ();
2020+ return _z_declare_subscriber (& sub -> _val , zs , keyexpr , closure .call , closure .drop , closure .context ,
2021+ allowed_origin );
2022+ } else {
2023+ uint32_t _sub_id ;
2024+ return _z_register_subscriber (& _sub_id , zs , keyexpr , closure .call , closure .drop , closure .context ,
2025+ allowed_origin , NULL );
2026+ }
20062027}
20072028
20082029z_result_t z_undeclare_subscriber (z_moved_subscriber_t * sub ) {
0 commit comments