public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v2 1/1] BaseTools: loop to retry remove when it fails.
       [not found] <cover.1525965238.git.jaben.carsey@intel.com>
@ 2018-05-10 15:14 ` Jaben Carsey
  2018-05-25 11:08   ` Zhu, Yonghong
  0 siblings, 1 reply; 2+ messages in thread
From: Jaben Carsey @ 2018-05-10 15:14 UTC (permalink / raw)
  To: edk2-devel; +Cc: Mike Kinney, Liming Gao, Yonghong Zhu

There is a common race condition when the OS fails to release a file
fast enough.  this adds a retry loop.

v2 - Add a timeout.

Cc: Mike Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
---
 BaseTools/Source/Python/Common/LongFilePathOs.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/Python/Common/LongFilePathOs.py b/BaseTools/Source/Python/Common/LongFilePathOs.py
index 2e530f9dd774..2cebbb276b19 100644
--- a/BaseTools/Source/Python/Common/LongFilePathOs.py
+++ b/BaseTools/Source/Python/Common/LongFilePathOs.py
@@ -1,7 +1,7 @@
 ## @file
 # Override built in module os to provide support for long file path
 #
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
 # This program and the accompanying materials
 # are licensed and made available under the terms and conditions of the BSD License
 # which accompanies this distribution.  The full text of the license may be found at
@@ -15,6 +15,7 @@ import os
 import LongFilePathOsPath
 from Common.LongFilePathSupport import LongFilePath
 from Common.LongFilePathSupport import UniToStr
+import time
 
 path = LongFilePathOsPath
 
@@ -22,7 +23,14 @@ def access(path, mode):
     return os.access(LongFilePath(path), mode)
 
 def remove(path):
-    return os.remove(LongFilePath(path))
+   Timeout = 0.0
+   while Timeout < 5.0:
+       try:
+           return os.remove(LongFilePath(path))
+       except:
+           time.sleep(0.1)
+           Timeout = Timeout + 0.1
+   return os.remove(LongFilePath(path))
 
 def removedirs(name):
     return os.removedirs(LongFilePath(name))
-- 
2.16.2.windows.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2 1/1] BaseTools: loop to retry remove when it fails.
  2018-05-10 15:14 ` [PATCH v2 1/1] BaseTools: loop to retry remove when it fails Jaben Carsey
@ 2018-05-25 11:08   ` Zhu, Yonghong
  0 siblings, 0 replies; 2+ messages in thread
From: Zhu, Yonghong @ 2018-05-25 11:08 UTC (permalink / raw)
  To: Carsey, Jaben, edk2-devel@lists.01.org
  Cc: Kinney, Michael D, Gao, Liming, Zhu, Yonghong

Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> 

Best Regards,
Zhu Yonghong

-----Original Message-----
From: Carsey, Jaben 
Sent: Thursday, May 10, 2018 11:15 PM
To: edk2-devel@lists.01.org
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
Subject: [PATCH v2 1/1] BaseTools: loop to retry remove when it fails.

There is a common race condition when the OS fails to release a file fast enough.  this adds a retry loop.

v2 - Add a timeout.

Cc: Mike Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
---
 BaseTools/Source/Python/Common/LongFilePathOs.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/Python/Common/LongFilePathOs.py b/BaseTools/Source/Python/Common/LongFilePathOs.py
index 2e530f9dd774..2cebbb276b19 100644
--- a/BaseTools/Source/Python/Common/LongFilePathOs.py
+++ b/BaseTools/Source/Python/Common/LongFilePathOs.py
@@ -1,7 +1,7 @@
 ## @file
 # Override built in module os to provide support for long file path  # -# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2014 - 2018, Intel Corporation. All rights 
+reserved.<BR>
 # This program and the accompanying materials  # are licensed and made available under the terms and conditions of the BSD License  # which accompanies this distribution.  The full text of the license may be found at @@ -15,6 +15,7 @@ import os  import LongFilePathOsPath  from Common.LongFilePathSupport import LongFilePath  from Common.LongFilePathSupport import UniToStr
+import time
 
 path = LongFilePathOsPath
 
@@ -22,7 +23,14 @@ def access(path, mode):
     return os.access(LongFilePath(path), mode)
 
 def remove(path):
-    return os.remove(LongFilePath(path))
+   Timeout = 0.0
+   while Timeout < 5.0:
+       try:
+           return os.remove(LongFilePath(path))
+       except:
+           time.sleep(0.1)
+           Timeout = Timeout + 0.1
+   return os.remove(LongFilePath(path))
 
 def removedirs(name):
     return os.removedirs(LongFilePath(name))
--
2.16.2.windows.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-05-25 11:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <cover.1525965238.git.jaben.carsey@intel.com>
2018-05-10 15:14 ` [PATCH v2 1/1] BaseTools: loop to retry remove when it fails Jaben Carsey
2018-05-25 11:08   ` Zhu, Yonghong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox