From c8065048f431c3b76a744afed1e2c86e5c7617d5 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 9 Nov 2015 23:29:55 +0100 Subject: [PATCH] Make sure to retry when loading an image that's been refreshed * Fixes a potential race if a change is detected while some other program has an exclusive lock on the file to write it, and we try to open before it's possible. A slow retry fixes that. --- renderdoc/core/image_viewer.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index f4e15fbdd..5ab1040fe 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -297,7 +297,20 @@ ReplayCreateStatus IMG_CreateReplayDevice(const char *logfile, IReplayDriver **d void ImageViewer::RefreshFile() { - FILE *f = FileIO::fopen(m_Filename.c_str(), "rb"); + FILE *f = NULL; + + for(int attempt=0; attempt < 10 && f == NULL; attempt++) + { + f = FileIO::fopen(m_Filename.c_str(), "rb"); + if(f) + break; + Threading::Sleep(400); + } + + if(!f) + { + RDCERR("Couldn't open file! Exclusive lock elsewhere?"); + } FetchTexture texDetails;