diff --git a/cmd/ipfs/daemon.go b/cmd/ipfs/daemon.go index aa8818722..4d2d57df3 100644 --- a/cmd/ipfs/daemon.go +++ b/cmd/ipfs/daemon.go @@ -278,6 +278,10 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment break } + // The node will also close the repo but there are many places we could + // fail before we get to that. It can't hurt to close it twice. + defer repo.Close() + cfg, err := cctx.GetConfig() if err != nil { return err diff --git a/test/sharness/t0060-daemon.sh b/test/sharness/t0060-daemon.sh index 3a5910891..a488bf817 100755 --- a/test/sharness/t0060-daemon.sh +++ b/test/sharness/t0060-daemon.sh @@ -128,6 +128,11 @@ test_expect_success "daemon with pipe eventually becomes live" ' test_fsh cat stdin_daemon_out || test_fsh cat stdin_daemon_err || test_fsh cat stdin_poll_apiout || test_fsh cat stdin_poll_apierr ' +test_expect_success "'ipfs daemon' cleans up when it fails to start" ' + test_must_fail ipfs daemon --routing=foobar && + test ! -e "$IPFS_PATH/repo.lock" +' + ulimit -S -n 512 TEST_ULIMIT_PRESET=1 test_launch_ipfs_daemon