From 57473153b7fa6fcb0cdb55cba4f455cabfa21937 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Mon, 19 Feb 2007 14:41:54 +0000 Subject: [PATCH] Fixed packet stream destroying when destroying scheduler context also. --- lib/silccore/silcattrs.h | 2 +- lib/silccore/silcpacket.c | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/silccore/silcattrs.h b/lib/silccore/silcattrs.h index 4886dbde..0a804f2f 100644 --- a/lib/silccore/silcattrs.h +++ b/lib/silccore/silcattrs.h @@ -197,7 +197,7 @@ typedef enum { */ typedef enum { SILC_ATTRIBUTE_NUMBER_ITU_E164 = 0, /* ITU E.164 */ - SILC_ATTRIBUTE_NUMBER_ITU_E123_PHONE = 1, /* ITU E.123 */ + SILC_ATTRIBUTE_NUMBER_ITU_E123 = 1, /* ITU E.123 */ SILC_ATTRIBUTE_NUMBER_ENUM = 2, /* ENUM, RFC 3761 */ } SilcAttributePNFormat; /***/ diff --git a/lib/silccore/silcpacket.c b/lib/silccore/silcpacket.c index 93ed46d5..ff6fdee6 100644 --- a/lib/silccore/silcpacket.c +++ b/lib/silccore/silcpacket.c @@ -825,6 +825,8 @@ SilcPacketStream silc_packet_stream_add_remote(SilcPacketStream stream, void silc_packet_stream_destroy(SilcPacketStream stream) { + SilcPacketEngine engine; + if (!stream) return; @@ -841,17 +843,17 @@ void silc_packet_stream_destroy(SilcPacketStream stream) if (!stream->udp) { /* Delete from engine */ - silc_mutex_lock(stream->sc->engine->lock); - silc_list_del(stream->sc->engine->streams, stream); + engine = stream->sc->engine; + silc_mutex_lock(engine->lock); + silc_list_del(engine->streams, stream); /* Remove per scheduler context, if it is not used anymore */ if (stream->sc) { stream->sc->stream_count--; if (!stream->sc->stream_count) - silc_hash_table_del(stream->sc->engine->contexts, - stream->sc->schedule); + silc_hash_table_del(engine->contexts, stream->sc->schedule); } - silc_mutex_unlock(stream->sc->engine->lock); + silc_mutex_unlock(engine->lock); /* Destroy the underlaying stream */ if (stream->stream) @@ -859,11 +861,12 @@ void silc_packet_stream_destroy(SilcPacketStream stream) } else { /* Delete from UDP remote hash table */ char tuple[64]; + engine = stream->sc->engine; silc_snprintf(tuple, sizeof(tuple), "%d%s", stream->remote_udp->remote_port, stream->remote_udp->remote_ip); - silc_mutex_lock(stream->sc->engine->lock); - silc_hash_table_del(stream->sc->engine->udp_remote, tuple); - silc_mutex_unlock(stream->sc->engine->lock); + silc_mutex_lock(engine->lock); + silc_hash_table_del(engine->udp_remote, tuple); + silc_mutex_unlock(engine->lock); silc_free(stream->remote_udp->remote_ip); silc_free(stream->remote_udp); @@ -1375,7 +1378,7 @@ static inline void silc_packet_send_ctr_increment(SilcPacketStream stream, unsigned char *iv = silc_cipher_get_iv(cipher); SilcUInt32 pc1, pc2; - /* Increment 64-bit packet counter.*/ + /* Increment 64-bit packet counter */ SILC_GET32_MSB(pc1, iv + 4); SILC_GET32_MSB(pc2, iv + 8); if (++pc2 == 0) -- 2.24.0