fix
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;