Free I/O buffers when we are finished with them!
authorMichael Brown <mcb30@etherboot.org>
Fri, 25 May 2007 16:01:31 +0000 (16:01 +0000)
committerMichael Brown <mcb30@etherboot.org>
Fri, 25 May 2007 16:01:31 +0000 (16:01 +0000)
src/core/posix_io.c

index b98766f..6cefbf7 100644 (file)
@@ -78,6 +78,7 @@ static void posix_file_free ( struct refcnt *refcnt ) {
        struct io_buffer *tmp;
 
        list_for_each_entry_safe ( iobuf, tmp, &file->data, list ) {
+               list_del ( &iobuf->list );
                free_iob ( iobuf );
        }
        free ( file );
@@ -279,8 +280,10 @@ ssize_t read_user ( int fd, userptr_t buffer, off_t offset, size_t max_len ) {
                        copy_to_user ( buffer, offset, iobuf->data,
                                       frag_len );
                        iob_pull ( iobuf, frag_len );
-                       if ( ! iob_len ( iobuf ) )
+                       if ( ! iob_len ( iobuf ) ) {
+                               list_del ( &iobuf-> list );
                                free_iob ( iobuf );
+                       }
                        file->pos += frag_len;
                        len += frag_len;
                        offset += frag_len;