less calls to xmpp_stanza_release()

Instead of using the "cloning version" `xmpp_stanza_add_child()` use the
version that takes ownership, so we don't have to release directly
afterwards.

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
This commit is contained in:
Steffen Jaeckel
2022-08-15 15:31:48 +02:00
parent d22558e0e3
commit d7d7435f21
4 changed files with 23 additions and 48 deletions

View File

@@ -391,8 +391,7 @@ static int _handle_digestmd5_challenge(xmpp_conn_t *conn,
xmpp_stanza_set_text(authdata, response); xmpp_stanza_set_text(authdata, response);
strophe_free(conn->ctx, response); strophe_free(conn->ctx, response);
xmpp_stanza_add_child(auth, authdata); xmpp_stanza_add_child_ex(auth, authdata, 0);
xmpp_stanza_release(authdata);
handler_add(conn, _handle_digestmd5_rspauth, XMPP_NS_SASL, NULL, NULL, handler_add(conn, _handle_digestmd5_rspauth, XMPP_NS_SASL, NULL, NULL,
NULL); NULL);
@@ -489,8 +488,7 @@ static int _handle_scram_challenge(xmpp_conn_t *conn,
xmpp_stanza_set_text(authdata, response); xmpp_stanza_set_text(authdata, response);
strophe_free(conn->ctx, response); strophe_free(conn->ctx, response);
xmpp_stanza_add_child(auth, authdata); xmpp_stanza_add_child_ex(auth, authdata, 0);
xmpp_stanza_release(authdata);
send_stanza(conn, auth, XMPP_QUEUE_STROPHE); send_stanza(conn, auth, XMPP_QUEUE_STROPHE);
@@ -684,8 +682,7 @@ static void _auth(xmpp_conn_t *conn)
} }
strophe_free(conn->ctx, str); strophe_free(conn->ctx, str);
xmpp_stanza_add_child(auth, authdata); xmpp_stanza_add_child_ex(auth, authdata, 0);
xmpp_stanza_release(authdata);
handler_add(conn, _handle_sasl_result, XMPP_NS_SASL, NULL, NULL, handler_add(conn, _handle_sasl_result, XMPP_NS_SASL, NULL, NULL,
"EXTERNAL"); "EXTERNAL");
@@ -748,8 +745,7 @@ static void _auth(xmpp_conn_t *conn)
} }
xmpp_stanza_set_text(authdata, str); xmpp_stanza_set_text(authdata, str);
strophe_free(conn->ctx, str); strophe_free(conn->ctx, str);
xmpp_stanza_add_child(auth, authdata); xmpp_stanza_add_child_ex(auth, authdata, 0);
xmpp_stanza_release(authdata);
handler_add(conn, _handle_scram_challenge, XMPP_NS_SASL, NULL, NULL, handler_add(conn, _handle_scram_challenge, XMPP_NS_SASL, NULL, NULL,
(void *)scram_ctx); (void *)scram_ctx);
@@ -797,8 +793,7 @@ static void _auth(xmpp_conn_t *conn)
strophe_free(conn->ctx, str); strophe_free(conn->ctx, str);
strophe_free(conn->ctx, authid); strophe_free(conn->ctx, authid);
xmpp_stanza_add_child(auth, authdata); xmpp_stanza_add_child_ex(auth, authdata, 0);
xmpp_stanza_release(authdata);
handler_add(conn, _handle_sasl_result, XMPP_NS_SASL, NULL, NULL, handler_add(conn, _handle_sasl_result, XMPP_NS_SASL, NULL, NULL,
"PLAIN"); "PLAIN");
@@ -914,15 +909,12 @@ static int _do_bind(xmpp_conn_t *conn, xmpp_stanza_t *bind)
return 0; return 0;
} }
xmpp_stanza_set_text(text, resource); xmpp_stanza_set_text(text, resource);
xmpp_stanza_add_child(res, text); xmpp_stanza_add_child_ex(res, text, 0);
xmpp_stanza_release(text); xmpp_stanza_add_child_ex(bind, res, 0);
xmpp_stanza_add_child(bind, res);
xmpp_stanza_release(res);
strophe_free(conn->ctx, resource); strophe_free(conn->ctx, resource);
} }
xmpp_stanza_add_child(iq, bind); xmpp_stanza_add_child_ex(iq, bind, 0);
xmpp_stanza_release(bind);
/* send bind request */ /* send bind request */
send_stanza(conn, iq, XMPP_QUEUE_STROPHE); send_stanza(conn, iq, XMPP_QUEUE_STROPHE);
@@ -1069,8 +1061,7 @@ _handle_bind(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata)
xmpp_stanza_set_name(session, "session"); xmpp_stanza_set_name(session, "session");
xmpp_stanza_set_ns(session, XMPP_NS_SESSION); xmpp_stanza_set_ns(session, XMPP_NS_SESSION);
xmpp_stanza_add_child(iq, session); xmpp_stanza_add_child_ex(iq, session, 0);
xmpp_stanza_release(session);
/* send session establishment request */ /* send session establishment request */
send_stanza(conn, iq, XMPP_QUEUE_STROPHE); send_stanza(conn, iq, XMPP_QUEUE_STROPHE);
@@ -1346,15 +1337,13 @@ static void _auth_legacy(xmpp_conn_t *conn)
goto err_free; goto err_free;
xmpp_stanza_set_name(query, "query"); xmpp_stanza_set_name(query, "query");
xmpp_stanza_set_ns(query, XMPP_NS_AUTH); xmpp_stanza_set_ns(query, XMPP_NS_AUTH);
xmpp_stanza_add_child(iq, query); xmpp_stanza_add_child_ex(iq, query, 0);
xmpp_stanza_release(query);
child = xmpp_stanza_new(conn->ctx); child = xmpp_stanza_new(conn->ctx);
if (!child) if (!child)
goto err_free; goto err_free;
xmpp_stanza_set_name(child, "username"); xmpp_stanza_set_name(child, "username");
xmpp_stanza_add_child(query, child); xmpp_stanza_add_child_ex(query, child, 0);
xmpp_stanza_release(child);
authdata = xmpp_stanza_new(conn->ctx); authdata = xmpp_stanza_new(conn->ctx);
if (!authdata) if (!authdata)
@@ -1366,29 +1355,25 @@ static void _auth_legacy(xmpp_conn_t *conn)
} }
xmpp_stanza_set_text(authdata, str); xmpp_stanza_set_text(authdata, str);
strophe_free(conn->ctx, str); strophe_free(conn->ctx, str);
xmpp_stanza_add_child(child, authdata); xmpp_stanza_add_child_ex(child, authdata, 0);
xmpp_stanza_release(authdata);
child = xmpp_stanza_new(conn->ctx); child = xmpp_stanza_new(conn->ctx);
if (!child) if (!child)
goto err_free; goto err_free;
xmpp_stanza_set_name(child, "password"); xmpp_stanza_set_name(child, "password");
xmpp_stanza_add_child(query, child); xmpp_stanza_add_child_ex(query, child, 0);
xmpp_stanza_release(child);
authdata = xmpp_stanza_new(conn->ctx); authdata = xmpp_stanza_new(conn->ctx);
if (!authdata) if (!authdata)
goto err_free; goto err_free;
xmpp_stanza_set_text(authdata, conn->pass); xmpp_stanza_set_text(authdata, conn->pass);
xmpp_stanza_add_child(child, authdata); xmpp_stanza_add_child_ex(child, authdata, 0);
xmpp_stanza_release(authdata);
child = xmpp_stanza_new(conn->ctx); child = xmpp_stanza_new(conn->ctx);
if (!child) if (!child)
goto err_free; goto err_free;
xmpp_stanza_set_name(child, "resource"); xmpp_stanza_set_name(child, "resource");
xmpp_stanza_add_child(query, child); xmpp_stanza_add_child_ex(query, child, 0);
xmpp_stanza_release(child);
authdata = xmpp_stanza_new(conn->ctx); authdata = xmpp_stanza_new(conn->ctx);
if (!authdata) if (!authdata)
@@ -1405,8 +1390,7 @@ static void _auth_legacy(xmpp_conn_t *conn)
xmpp_disconnect(conn); xmpp_disconnect(conn);
return; return;
} }
xmpp_stanza_add_child(child, authdata); xmpp_stanza_add_child_ex(child, authdata, 0);
xmpp_stanza_release(authdata);
handler_add_id(conn, _handle_legacy, "_xmpp_auth1", NULL); handler_add_id(conn, _handle_legacy, "_xmpp_auth1", NULL);
handler_add_timed(conn, _handle_missing_legacy, LEGACY_TIMEOUT, NULL); handler_add_timed(conn, _handle_missing_legacy, LEGACY_TIMEOUT, NULL);

View File

@@ -152,8 +152,7 @@ static void complete_inner_text(parser_t *parser)
/* FIXME: disconnect on allocation error */ /* FIXME: disconnect on allocation error */
if (stanza) { if (stanza) {
xmpp_stanza_set_text(stanza, parser->inner_text); xmpp_stanza_set_text(stanza, parser->inner_text);
xmpp_stanza_add_child(parser->stanza, stanza); xmpp_stanza_add_child_ex(parser->stanza, stanza, 0);
xmpp_stanza_release(stanza);
} }
strophe_free(parser->ctx, parser->inner_text); strophe_free(parser->ctx, parser->inner_text);
parser->inner_text = NULL; parser->inner_text = NULL;
@@ -195,8 +194,7 @@ _start_element(void *userdata, const XML_Char *nsname, const XML_Char **attrs)
if (parser->stanza != NULL) { if (parser->stanza != NULL) {
complete_inner_text(parser); complete_inner_text(parser);
xmpp_stanza_add_child(parser->stanza, child); xmpp_stanza_add_child_ex(parser->stanza, child, 0);
xmpp_stanza_release(child);
} }
parser->stanza = child; parser->stanza = child;
} }

View File

@@ -164,10 +164,7 @@ static void _start_element(void *userdata,
xmpp_stanza_set_ns(child, (char *)uri); xmpp_stanza_set_ns(child, (char *)uri);
/* add child to parent */ /* add child to parent */
xmpp_stanza_add_child(parser->stanza, child); xmpp_stanza_add_child_ex(parser->stanza, child, 0);
/* the child is owned by the toplevel stanza now */
xmpp_stanza_release(child);
/* make child the current stanza */ /* make child the current stanza */
parser->stanza = child; parser->stanza = child;
@@ -223,8 +220,7 @@ static void _characters(void *userdata, const xmlChar *chr, int len)
} }
xmpp_stanza_set_text_with_size(stanza, (char *)chr, len); xmpp_stanza_set_text_with_size(stanza, (char *)chr, len);
xmpp_stanza_add_child(parser->stanza, stanza); xmpp_stanza_add_child_ex(parser->stanza, stanza, 0);
xmpp_stanza_release(stanza);
} }
/* create a new parser */ /* create a new parser */

View File

@@ -1604,8 +1604,7 @@ xmpp_error_new(xmpp_ctx_t *ctx, xmpp_error_type_t type, const char *text)
} }
xmpp_stanza_set_ns(error_type, XMPP_NS_STREAMS_IETF); xmpp_stanza_set_ns(error_type, XMPP_NS_STREAMS_IETF);
xmpp_stanza_add_child(error, error_type); xmpp_stanza_add_child_ex(error, error_type, 0);
xmpp_stanza_release(error_type);
if (text) { if (text) {
xmpp_stanza_t *error_text = xmpp_stanza_new(ctx); xmpp_stanza_t *error_text = xmpp_stanza_new(ctx);
@@ -1615,11 +1614,9 @@ xmpp_error_new(xmpp_ctx_t *ctx, xmpp_error_type_t type, const char *text)
xmpp_stanza_set_ns(error_text, XMPP_NS_STREAMS_IETF); xmpp_stanza_set_ns(error_text, XMPP_NS_STREAMS_IETF);
xmpp_stanza_set_text(content, text); xmpp_stanza_set_text(content, text);
xmpp_stanza_add_child(error_text, content); xmpp_stanza_add_child_ex(error_text, content, 0);
xmpp_stanza_release(content);
xmpp_stanza_add_child(error, error_text); xmpp_stanza_add_child_ex(error, error_text, 0);
xmpp_stanza_release(error_text);
} }
return error; return error;