X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fiface-stream.c;h=b95b1d362c24fa832adaeb16e70a9d2dea0db992;hb=caf85567e859e58d73a0214ff2a89671692814a5;hp=62631fe8de8cb9f70cc3bfa88810771dc3a812c1;hpb=07aa8f3c18a33af0961e7546980a63ab5f6fba4f;p=palacios.git diff --git a/linux_module/iface-stream.c b/linux_module/iface-stream.c index 62631fe..b95b1d3 100644 --- a/linux_module/iface-stream.c +++ b/linux_module/iface-stream.c @@ -300,9 +300,13 @@ static int stream_init( void ) { static int stream_deinit( void ) { - if (!list_empty(&(global_streams))) { - ERROR("Error removing module with open streams\n"); - DEBUG("TODO: free old streams... \n"); + struct stream_state * stream = NULL; + struct stream_state * tmp = NULL; + + list_for_each_entry_safe(stream, tmp, &(global_streams), stream_node) { + free_ringbuf(stream->out_ring); + list_del(&(stream->stream_node)); + palacios_free(stream); } return 0; @@ -379,11 +383,18 @@ static int guest_stream_init(struct v3_guest * guest, void ** vm_data) { static int guest_stream_deinit(struct v3_guest * guest, void * vm_data) { struct vm_global_streams * state = vm_data; - if (!list_empty(&(state->open_streams))) { - ERROR("Error shutting down VM with open streams\n"); - return -1; - } + struct stream_state * stream = NULL; + struct stream_state * tmp = NULL; + + list_for_each_entry_safe(stream, tmp, &(global_streams), stream_node) { + free_ringbuf(stream->out_ring); + list_del(&(stream->stream_node)); + palacios_free(stream); + } + + palacios_free(state); + return 0; }