diff --git a/.gitignore b/.gitignore index 224bc683..064d9946 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ coverage.txt .DS_Store /webp_server_go /metadata/* +/.idea/inspectionProfiles/Project_Default.xml diff --git a/config/config.go b/config/config.go index 0699ba64..8ce3299e 100644 --- a/config/config.go +++ b/config/config.go @@ -55,7 +55,7 @@ var ( PrefetchForeground bool // Standalone prefetch, prefetch and exit AllowNonImage bool Config = NewWebPConfig() - Version = "0.13.6" + Version = "0.13.7" WriteLock = cache.New(5*time.Minute, 10*time.Minute) ConvertLock = cache.New(5*time.Minute, 10*time.Minute) LocalHostAlias = "local" diff --git a/schedule/cache_clean.go b/schedule/cache_clean.go index 34740f3e..5a85f846 100644 --- a/schedule/cache_clean.go +++ b/schedule/cache_clean.go @@ -113,3 +113,27 @@ func CleanCache() { } } } + +func DeleteDeadCache() { + ticker := time.NewTicker(30 * time.Second) + defer ticker.Stop() + threshold := time.Now().Add(-10 * time.Minute) + for { + select { + case <-ticker.C: + _ = filepath.Walk(os.TempDir()+"vips-", func(path string, info os.FileInfo, err error) error { + log.Debugf("Checking possible dead cache: %s", path) + if err != nil { + return err + } + if info.IsDir() && info.ModTime().Before(threshold) { + // only delete directory + log.Warnf("Deleting: %s", path) + _ = os.RemoveAll(path) + return filepath.SkipDir + } + return nil + }) + } + } +} diff --git a/webp-server.go b/webp-server.go index 987d5b44..c08cf824 100644 --- a/webp-server.go +++ b/webp-server.go @@ -98,6 +98,7 @@ func init() { } func main() { + go schedule.DeleteDeadCache() if config.Config.MaxCacheSize != 0 { go schedule.CleanCache() }