From 881e362f932bfd2d3b5daddd83545d09bda16e40 Mon Sep 17 00:00:00 2001
From: Valerio Ponte <valerio.ponte@gmail.com>
Date: Fri, 10 May 2013 21:11:47 +0200
Subject: [PATCH] final fix for xsendfile zip generation race condition

---
 lib/helper.php | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/lib/helper.php b/lib/helper.php
index ca508e1d93..056c9a37fe 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -621,9 +621,26 @@ class OC_Helper {
 	 * remove all files in PHP /oc-noclean temp dir
 	 */
 	public static function cleanTmpNoClean() {
-		$tmpDirNoCleanFile=get_temp_dir().'/oc-noclean/';
-		if(file_exists($tmpDirNoCleanFile)) {
-			self::rmdirr($tmpDirNoCleanFile);
+		$tmpDirNoCleanName=get_temp_dir().'/oc-noclean/';
+		if(file_exists($tmpDirNoCleanName) && is_dir($tmpDirNoCleanName)) {
+			$files=scandir($tmpDirNoCleanName);
+			foreach($files as $file) {
+				$fileName = $tmpDirNoCleanName . $file;
+				if (!\OC\Files\Filesystem::isIgnoredDir($file) && filemtime($fileName) + 600 < time()) {
+					unlink($fileName);
+				}
+			}
+			// if oc-noclean is empty delete it
+			$isTmpDirNoCleanEmpty = true;
+			$tmpDirNoClean = opendir($tmpDirNoCleanName);
+			while (false !== ($file = readdir($tmpDirNoClean))) {
+				if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+					$isTmpDirNoCleanEmpty = false;
+				}
+			}
+			if ($isTmpDirNoCleanEmpty) {
+				rmdir($tmpDirNoCleanName);
+			}
 		}
 	}
 
-- 
GitLab