X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Ffile-handle-def.c;h=716a029cc701a567d4c28c53ab0119fed66d003f;hb=b078357653b9eebbba49a088c81c3dd935b58698;hp=1296a5b171ab342b9985d47d8c04ef6dff21d021;hpb=4d5df6bcfe9611ed7bed2585e1c2a4a48ece44fb;p=pspp diff --git a/src/data/file-handle-def.c b/src/data/file-handle-def.c index 1296a5b171..716a029cc7 100644 --- a/src/data/file-handle-def.c +++ b/src/data/file-handle-def.c @@ -115,12 +115,17 @@ fh_done (void) HMAP_FOR_EACH_SAFE (handle, next, struct file_handle, name_node, &named_handles) unname_handle (handle); + + free_handle (inline_file); } /* Free HANDLE and remove it from the global list. */ static void free_handle (struct file_handle *handle) { + if (handle == NULL) + return; + /* Remove handle from global list. */ if (handle->id != NULL) hmap_delete (&named_handles, &handle->name_node); @@ -153,6 +158,8 @@ unname_handle (struct file_handle *handle) struct file_handle * fh_ref (struct file_handle *handle) { + if (handle == fh_inline_file ()) + return handle; assert (handle->ref_cnt > 0); handle->ref_cnt++; return handle; @@ -165,6 +172,8 @@ fh_unref (struct file_handle *handle) { if (handle != NULL) { + if (handle == fh_inline_file ()) + return; assert (handle->ref_cnt > 0); if (--handle->ref_cnt == 0) free_handle (handle);