PacketEngine: Don't free underlaying stream in packet stream create error
authorPekka Riikonen <priikone@silcnet.org>
Fri, 27 Feb 2009 14:22:36 +0000 (16:22 +0200)
committerPekka Riikonen <priikone@silcnet.org>
Fri, 27 Feb 2009 14:22:36 +0000 (16:22 +0200)
If packet stream creation failed it freed the stream given as argument.
This is wrong.  It is the caller's responsibility to free it if the
packet stream creation failed.

lib/silccore/silcpacket.c

index b67156758dab069682343e44f8f4739288a36d06..5ccf822fb16977c29274d82db3679be6883250f8 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2008 Pekka Riikonen
+  Copyright (C) 1997 - 2009 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -710,6 +710,7 @@ SilcPacketStream silc_packet_stream_create(SilcPacketEngine engine,
   /* Initialize packet procesors list */
   ps->process = silc_dlist_init();
   if (!ps->process) {
+    ps->stream = NULL;
     silc_packet_stream_destroy(ps);
     return NULL;
   }
@@ -722,6 +723,7 @@ SilcPacketStream silc_packet_stream_create(SilcPacketEngine engine,
     ps->sc = silc_calloc(1, sizeof(*ps->sc));
     if (!ps->sc) {
       silc_mutex_unlock(engine->lock);
+      ps->stream = NULL;
       silc_packet_stream_destroy(ps);
       return NULL;
     }
@@ -734,6 +736,7 @@ SilcPacketStream silc_packet_stream_create(SilcPacketEngine engine,
       silc_free(ps->sc);
       ps->sc = NULL;
       silc_mutex_unlock(engine->lock);
+      ps->stream = NULL;
       silc_packet_stream_destroy(ps);
       return NULL;
     }
@@ -745,6 +748,7 @@ SilcPacketStream silc_packet_stream_create(SilcPacketEngine engine,
       silc_free(ps->sc);
       ps->sc = NULL;
       silc_mutex_unlock(engine->lock);
+      ps->stream = NULL;
       silc_packet_stream_destroy(ps);
       return NULL;
     }
@@ -757,6 +761,7 @@ SilcPacketStream silc_packet_stream_create(SilcPacketEngine engine,
       silc_free(ps->sc);
       ps->sc = NULL;
       silc_mutex_unlock(engine->lock);
+      ps->stream = NULL;
       silc_packet_stream_destroy(ps);
       return NULL;
     }
@@ -779,6 +784,7 @@ SilcPacketStream silc_packet_stream_create(SilcPacketEngine engine,
   if (!silc_stream_set_notifier(ps->stream, schedule,
                                silc_packet_stream_io, ps)) {
     SILC_LOG_DEBUG(("Cannot set stream notifier for packet stream"));
+    ps->stream = NULL;
     silc_packet_stream_destroy(ps);
     return NULL;
   }