mirror of
https://github.com/obgm/libcoap.git
synced 2026-11-06 09:42:54 +03:00
coap_session.c: fix session release
coap_session_t uses reference counting hence client sessions must be released by coap_session_release() instead of directly calling coap_session_free().
This commit is contained in:
1 parent
08f7f5c2ce
commit
46c908af8f
1 file changed
+8
-8
+8
-8
@@ -447,6 +447,8 @@ coap_session_create_client(
|
||||
if (!session)
|
||||
goto error;
|
||||
|
||||
coap_session_reference(session);
|
||||
|
||||
if (proto == COAP_PROTO_UDP || proto == COAP_PROTO_DTLS) {
|
||||
if (!coap_socket_connect_udp(&session->sock, &session->local_if, server,
|
||||
proto == COAP_PROTO_DTLS ? COAPS_DEFAULT_PORT : COAP_DEFAULT_PORT,
|
||||
@@ -461,7 +463,6 @@ coap_session_create_client(
|
||||
}
|
||||
}
|
||||
|
||||
session->ref = 1;
|
||||
session->sock.flags |= COAP_SOCKET_NOT_EMPTY | COAP_SOCKET_CONNECTED | COAP_SOCKET_WANT_READ;
|
||||
if (local_if)
|
||||
session->sock.flags |= COAP_SOCKET_BOUND;
|
||||
@@ -469,8 +470,7 @@ coap_session_create_client(
|
||||
return session;
|
||||
|
||||
error:
|
||||
if (session)
|
||||
coap_session_free(session);
|
||||
coap_session_release(session);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -483,7 +483,7 @@ coap_session_connect(coap_session_t *session) {
|
||||
if (session->tls) {
|
||||
session->state = COAP_SESSION_STATE_HANDSHAKE;
|
||||
} else {
|
||||
coap_session_free(session);
|
||||
coap_session_release(session);
|
||||
return NULL;
|
||||
}
|
||||
} else if (session->proto == COAP_PROTO_TCP || session->proto == COAP_PROTO_TLS) {
|
||||
@@ -499,7 +499,7 @@ coap_session_connect(coap_session_t *session) {
|
||||
coap_session_send_csm(session);
|
||||
}
|
||||
} else {
|
||||
coap_session_free(session);
|
||||
coap_session_release(session);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
@@ -524,7 +524,7 @@ coap_session_accept(coap_session_t *session) {
|
||||
coap_session_send_csm(session);
|
||||
}
|
||||
} else {
|
||||
coap_session_free(session);
|
||||
coap_session_release(session);
|
||||
session = NULL;
|
||||
}
|
||||
}
|
||||
@@ -626,6 +626,7 @@ coap_session_t *coap_new_server_session(
|
||||
&ep->bind_addr, NULL, NULL, 0, ctx, ep );
|
||||
if (!session)
|
||||
goto error;
|
||||
|
||||
if (!coap_socket_accept_tcp(&ep->sock, &session->sock,
|
||||
&session->local_addr, &session->remote_addr))
|
||||
goto error;
|
||||
@@ -639,8 +640,7 @@ coap_session_t *coap_new_server_session(
|
||||
return session;
|
||||
|
||||
error:
|
||||
if (session)
|
||||
coap_session_free(session);
|
||||
coap_session_free(session);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user