fix
diff --git a/ChangeLog b/ChangeLog
index ca86052..cc49014 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-12-02  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Fix memory leak in fuse_read_cmd()/fuse_process_cmd().  Bug
+	reported by Vincenzo Ciancia
+
+	* Handle exit-by-umount in fuse_read_cmd()
+
 2005-11-29  Miklos Szeredi <miklos@szeredi.hu>
 
 	* Check if '-msoft-float' option is supported by compiler when
diff --git a/lib/fuse.c b/lib/fuse.c
index 4146d41..8733164 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -1742,6 +1742,7 @@
 void fuse_process_cmd(struct fuse *f, struct fuse_cmd *cmd)
 {
     fuse_session_process(f->se, cmd->buf, cmd->buflen, cmd->ch);
+    free_cmd(cmd);
 }
 
 int fuse_exited(struct fuse *f)
@@ -1779,6 +1780,8 @@
         int res = fuse_chan_receive(ch, cmd->buf, bufsize);
         if (res <= 0) {
             free_cmd(cmd);
+            if (res == -1)
+                fuse_exit(f);
             return NULL;
         }
         cmd->buflen = res;