tests: allow one extra fd in fd leak detector (dirCache)

The gocryptfs process may keep one fd open for up to one second
in the dirCache.
This commit is contained in:
Jakob Unterwurzacher 2019-01-03 15:38:51 +01:00
parent 4f66d66755
commit bb9884549b
1 changed files with 5 additions and 2 deletions

View File

@ -122,6 +122,9 @@ func UnmountPanic(dir string) {
} }
} }
// gocryptfs may hold up to maxCacheFds open for caching
const maxCacheFds = 1
// UnmountErr tries to unmount "dir", retrying 10 times, and returns the // UnmountErr tries to unmount "dir", retrying 10 times, and returns the
// resulting error. // resulting error.
func UnmountErr(dir string) (err error) { func UnmountErr(dir string) (err error) {
@ -146,7 +149,7 @@ func UnmountErr(dir string) (err error) {
// hope that all close commands get through to the gocryptfs // hope that all close commands get through to the gocryptfs
// process. // process.
fdsNow = ListFds(pid) fdsNow = ListFds(pid)
if len(fdsNow) <= len(fds) { if len(fdsNow) <= len(fds)+maxCacheFds {
break break
} }
fmt.Printf("UnmountErr: fdsOld=%d fdsNow=%d, retrying\n", len(fds), len(fdsNow)) fmt.Printf("UnmountErr: fdsOld=%d fdsNow=%d, retrying\n", len(fds), len(fdsNow))
@ -159,7 +162,7 @@ func UnmountErr(dir string) (err error) {
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
err = cmd.Run() err = cmd.Run()
if err == nil { if err == nil {
if len(fdsNow) > len(fds) { if len(fdsNow) > len(fds)+maxCacheFds {
return fmt.Errorf("FD leak? pid=%d dir=%q, fds:\nold=%v \nnew=%v\n", pid, dir, fds, fdsNow) return fmt.Errorf("FD leak? pid=%d dir=%q, fds:\nold=%v \nnew=%v\n", pid, dir, fds, fdsNow)
} }
return nil return nil